Spring的AOP的总结
2019-03-09 16:09
120 查看
SpringAOP
SpringAOP:面向切面编程,常见应用场景有权限、事务、控制、日志等。
SpringAOP的原理:使用cglib代理设计模式。
用注解来模拟一下Spring的AOP
1、创建一个切面类=
/** * 定义一个切面类 * @author 紫炎易霄 */ @Component @Aspect public class TranAop { @Before("execution(* com.zyyx.service.UserService.*(..))") public void before(){ System.out.println("前置通知!"); } @After("execution(* com.zyyx.service.UserService.*(..))") public void after(){ System.out.println("后置通知!"); } @AfterThrowing("execution(* com.zyyx.service.UserService.*(..))") public void throwing(){ System.out.println("异常通知!"); } @AfterReturning("execution(* com.zyyx.service.UserService.*(..))") public void returning(){ System.out.println("返回通知!"); } @Around("execution(* com.zyyx.service.UserService.*(..))") public void arounding(ProceedingJoinPoint pJoinPoint) throws Throwable{ System.out.println("环绕通知的开头!"); pJoinPoint.proceed(); System.out.println("环绕通知的结尾!"); } }
2、写一个dao和service
/** * dao * @author 紫炎易霄 */ @Repository public class UserDao { public void work(){ System.out.println("我正在执行插入数据的操作!"); } }
/** * service * @author 紫炎易霄 */ @Service public class UserService { @Autowired private UserDao userDao; public void work(){ userDao.work(); } }
3、beans.xml文件的配置
<!-- 开启dao和service的扫描注解 --> <context:component-scan base-package="com.zyyx"/> <!-- 开启aop注解 --> <aop:aspectj-autoproxy/>
4、、单元测试
public class TestSpringAop { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = (UserService) ac.getBean("userService"); userService.work(); } }
运行结果
用XML来模拟一下Spring的AOP
1、将切面类的注解清空
/** * 定义一个切面类 * @author 紫炎易霄 */ public class TranAop { public void before(){ System.out.println("前置通知!"); } public void after(){ System.out.println("后置通知!"); } public void throwing(){ System.out.println("异常通知!"); } public void returning(){ System.out.println("返回通知!"); } public void arounding(ProceedingJoinPoint pJoinPoint) throws Throwable{ System.out.println("环绕通知的开头!"); pJoinPoint.proceed(); System.out.println("环绕通知的结尾!"); } }
2、配置xml文件
<!-- 开启dao和service的扫描注解 --> <context:component-scan base-package="com.zyyx"/> <bean id="tranAop" class="com.zyyx.aop.TranAop" /> <!-- aop的配置 --> <aop:config> <!-- 切入点 --> <aop:pointcut expression="execution(* com.zyyx.service.UserService.*(..))" id="point"/> <!-- 切面 --> <aop:aspect ref="tranAop"> <!-- 通知 --> <aop:before method="before" pointcut-ref="point"/> <aop:after method="after" pointcut-ref="point"/> <aop:after-throwing method="throwing" pointcut-ref="point"/> <aop:around method="arounding" pointcut-ref="point"/> <aop:after-returning method="returning" pointcut-ref="point"/> </aop:aspect> </aop:config>
运行结果
相关文章推荐
- Spring AOP与事务配置总结
- Spring学习总结2(AOP-代理模式)
- spring中BeanNameAutoProxyCreator和AnnotationAwareAspectJAutoProxyCreator两种AOP代理方式使用总结
- Spring知识点总结(四)之SpringAOP基础 - 代理设计模式
- spring AOP 理论知识点总结
- spring aop技术 学习总结
- spring - aop 使用方式总结
- Spring 源码分析(三) —— AOP(六)源码分析与总结
- Spring总结3—AOP
- SSM框架系列学习总结2之Spring AOP
- SpringAOP的应用实例与总结
- [Spring框架]Spring AOP基础入门总结一.
- Spring学习总结之面向切面(AOP)
- Spring总结之AOP
- Spring总结(二)(AOP)
- Spring学习笔记(17)-----------Spring AOP总结(2)
- Spring核心AOP(面向切面编程)总结
- Spring AOP切点表达式用法总结
- Spring总结——AOP、JDBC和事务的总结