Spring AOP编程经验总结

编程范式概览:面向过程,面向对象,函数式编程,事件驱动编程,面向切面等,

AOP是什么?

  Spring AOP是采用面向切面编程的编程范式,而非编程语言,它只能解决特定问题,而非所有问题,它与OOP不是替代关系,而是补充。

AOP的初衷:

  DRY  Don't Repeat Yourself

  SoC Separation of Concerns 

AOP的好处 :

  集中处理某一关注点/横切逻辑,可以很方便的添加和删除关键点,侵入性少,可以增强代码可读性和可维护性。

AOP的应用场景:

  权限控制,缓存控制,事务控制,审计日志,性能监控,分布式追踪,异常处理。

Pointcut Expression

  1、designators 

    匹配方法:execution()

    匹配注解:@target @args @within @annoation @

    匹配包/类型 @within

    匹配对象 this() bean() target()

    匹配参数 args()

  2、wildcards :  *   +   ..

  3、operators :&& || !

织入的时机:

  代理选择:如果目标对象实现了接口口,则默认采用JDK动态代理,如果目标对象没有实现接口,则cglib进行动态代理,如果目标对象实现了接口,但强制使用cglib代理,则使用cglib代理。

开启强制使用cglib动态代理的方法:在模块启动类加@EnableAspectJAutoProxy(proxyTargetClass=true)

Aop如何实现功能叠加:采用责任链模式

注意事项:

  1、不宜把重要的业务逻辑放到aop中

  2、无法拦截static final  private方法

  3、无法拦截内部方法调用:原因是内部调用的对象是this,而非SPring容器代理的对象,解决方法有两个:1、ApplicationContextHolder获得bean,然后调用 2、用新的类去调用,不用内部调用。

猜你喜欢

转载自www.cnblogs.com/niuyg928/p/11404342.html
今日推荐