zoukankan      html  css  js  c++  java
  • 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、用新的类去调用,不用内部调用。

  • 相关阅读:
    比较器
    堆排序
    快速排序
    荷兰国旗问题
    python查漏补缺 --- 基础概念及控制结构
    redis 交集、并集、差集
    spark问题
    IDEA写scala简单操作
    hive 中遇到的正则
    scala模式匹配
  • 原文地址:https://www.cnblogs.com/niuyg928/p/11404342.html
Copyright © 2011-2022 走看看