Srping AOP基于注解和配置文件方式实现前通知,后通知,环绕通知,异常通知,最终通知
2017-11-15 21:21
591 查看
Srping AOP基于注解和配置文件方式实现前通知,后通知,环绕通知,异常通知,最终通知
注解方式:
1、切面类
2、主配置文件
3、测试接口 UserDAO
4.接口实现类
5、测试类
配置文件方式:
1、切面类
2、主配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:user="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!-- 创建非主要业务方法类的对象:切面 -->
<bean id="myAspect" class="com.sz.aspect.MyAspect"></bean>
<bean id="userDao" class="com.sz.dao.impl.UserDaoImpl"></bean>
<!-- 实现将非主要业务方法切入到主要业务方法中去 -->
<aop:config>
<!-- 将切面对象引入 -->
<aop:aspect ref="myAspect" id="my">
<!-- 定义切入点:在哪些地方实现切入 -->
<aop:pointcut expression="execution(* com.sz.dao.impl.UserDaoImpl.*(..))" id="p1"/>
<!-- 配置前通知 -->
<!-- method配置非主要业务方法/通知/关注点 -->
<aop:before method="login" pointcut-ref="p1"/>
<!-- 配置后通知 -->
<aop:after-returning method="log4j" pointcut-ref="p1"/>
<!-- 配置环绕通知 -->
<aop:around method="rou" pointcut-ref="p1"/>
<!-- 配置异常后通知 -->
<aop:after-throwing method="exception" pointcut-ref="p1"/>
<!-- 配置最终通知 -->
<aop:after method="finallyF" pointcut-ref="p1"/>
</aop:aspect>
</aop:config>
</beans>
3、测试接口UserDAO
4.接口实现类
5、测试类
注解方式:
1、切面类
package cn.sz.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; //这是一个横向抽取非主要业务方法的类 @Component @Aspect public class MyAspect { @Before(value = "execution(* cn.sz.dao.impl.*.*(..))") public void login(JoinPoint jp) { // 获取连接点的信息 Object o = jp.getThis(); System.out.println(o); // ((UserDao)o).delete(); System.out.println("login......."); } @AfterReturning(value = "execution(* cn.sz.dao.impl.*.*(..))") public void log4j() { System.out.println("log4j......"); } @Around(value = "execution(* cn.sz.dao.impl.*.*(..))") public void rou(ProceedingJoinPoint pjp) throws Throwable { System.out.println("round......1"); pjp.proceed(); System.out.println("round......2"); } @AfterThrowing(value = "execution(* cn.sz.dao.impl.*.*(..))") public void exception() { System.out.println("exception......"); } @After(value = "execution(* cn.sz.dao.impl.*.*(..))") public void finallyF() { System.out.println("finallyF......"); } }
2、主配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:user="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd "> <!-- 扫描:当前包中的类和子包中的类 --> <context:component-scan base-package="com.sz"></context:component-scan> <aop:aspectj-autoproxy/> <bean id="userDao" class="com.sz.dao.impl.UserDaoImpl"></bean> </beans>
3、测试接口 UserDAO
package cn.sz.dao; public interface UserDAO { public void save(); }
4.接口实现类
package cn.sz.dao.impl; import cn.sz.dao.UserDAO; //主要业务功能类 public class UserDAOImpl implements UserDAO { @Override public void save() { // 测试出异常 // String a = null; // a.length(); System.out.println("save..."); } }
5、测试类
package cn.sz.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.sz.dao.UserDAO; public class AopTest { @Test public void test1() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDAO userDAO = ac.getBean("userDao", UserDAO.class); userDAO.save(); } }
配置文件方式:
1、切面类
package cn.sz.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.stereotype.Component; //这是一个横向抽取非主要业务方法的类 public class MyAspect { public void login(JoinPoint jp) { // 获取连接点的信息 Object o = jp.getThis(); System.out.println(o); // ((UserDao)o).delete(); System.out.println("login......."); } public void log4j() { System.out.println("log4j......"); } public void rou(ProceedingJoinPoint pjp) throws Throwable { System.out.println("round......1"); pjp.proceed(); System.out.println("round......2"); } public void exception() { System.out.println("exception......"); } public void finallyF() { System.out.println("finallyF......"); } }
2、主配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:user="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!-- 创建非主要业务方法类的对象:切面 -->
<bean id="myAspect" class="com.sz.aspect.MyAspect"></bean>
<bean id="userDao" class="com.sz.dao.impl.UserDaoImpl"></bean>
<!-- 实现将非主要业务方法切入到主要业务方法中去 -->
<aop:config>
<!-- 将切面对象引入 -->
<aop:aspect ref="myAspect" id="my">
<!-- 定义切入点:在哪些地方实现切入 -->
<aop:pointcut expression="execution(* com.sz.dao.impl.UserDaoImpl.*(..))" id="p1"/>
<!-- 配置前通知 -->
<!-- method配置非主要业务方法/通知/关注点 -->
<aop:before method="login" pointcut-ref="p1"/>
<!-- 配置后通知 -->
<aop:after-returning method="log4j" pointcut-ref="p1"/>
<!-- 配置环绕通知 -->
<aop:around method="rou" pointcut-ref="p1"/>
<!-- 配置异常后通知 -->
<aop:after-throwing method="exception" pointcut-ref="p1"/>
<!-- 配置最终通知 -->
<aop:after method="finallyF" pointcut-ref="p1"/>
</aop:aspect>
</aop:config>
</beans>
3、测试接口UserDAO
package cn.sz.dao; public interface UserDAO { public void save(); }
4.接口实现类
package cn.sz.dao.impl; import cn.sz.dao.UserDAO; //主要业务功能类 public class UserDAOImpl implements UserDAO { @Override public void save() { // 测试出异常 // String a = null; // a.length(); System.out.println("save..."); } }
5、测试类
package cn.sz.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.sz.dao.UserDAO; public class AopTest { @Test public void test1() { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDAO userDAO = ac.getBean("userDao", UserDAO.class); userDAO.save(); } }
相关文章推荐
- 21.Spring_基于配置文件的方式实现切面通知
- springMVC基于注解方式实现配置流程
- Java 基于quartz实现定时 之一(注解方式配置)
- 基于注解的返回通知、异常通知、环绕通知-佟刚老师《Spring4视频教程》学习笔记(19)
- Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系
- Java 基于quartz实现定时 之一(注解方式配置)
- spring Quartz基于配置文件和注解的实现
- Spring 通过来AOP 实现前置,环绕,异常通知,注解(转)
- 基于已构建S2SH项目配置全注解方式简化配置文件
- spring Quartz基于配置文件和注解的实现
- 用Spring配置文件或者注解方式实现AOP
- Spring AOP基于注解的“零配置”方式实现以及一些其他知识点
- spring之aop编程——基于注解、xml配置文件方式
- [学习小结]Spring_通知的那些事和基于配置文件的方式来配置AOP
- spring Quartz基于配置文件和注解的实现
- 8 -- 深入使用Spring -- 4...6 AOP代理:基于注解的XML配置文件的管理方式
- Spring 通过AOP 来实现前置,环绕,异常通知,注解
- spring的事务管理(配置文件方式和注解方式实现、转账环境搭建)
- Spring 通过来AOP 实现前置,环绕,异常通知,注解
- 用Spring配置文件或者注解方式实现AOP