曹耘豪的博客

Spring之AOP

  1. AOP
  2. Spring 动态代理
  3. Spring Boot动态代理使用
    1. Pointcut表达式类型
  4. AspactJ
  5. Spring AOP和AspectJ的区别
  • | Spring AOP | AspectJ || —
  • 参考
  • AOP

    面向切面编程。

    Spring 动态代理

    方式

    Spring Boot动态代理使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Aspect
    @Component
    public class AopComponent {

    @Pointcut("within(com.example..*)")
    public void pointcut() {

    }

    @Before("pointcut()")
    public void before(JoinPoint point) {
    log.debug("Before");
    }
    }

    Pointcut表达式类型

    execution:可以精确到返回值、参数、方法名
    within:范围是包或者类,eg:within(com.cyh.app1..*)

    AspactJ

    Spring AOP和AspectJ的区别

    | Spring AOP | AspectJ |
    | —


















    |
    | 用纯Java实现 | 使用Java编程语言的扩展实现 |
    | 无需单独的编译过程 | 除非设置了LTW,否则需要AspectJ编译器(ajc) |
    | 仅需运行时编织 | 运行时编织不可用。支持编译时,后编译和加载时编织 |
    | 不足–仅支持方法级编织 | 更强大–可以编织字段,方法,构造函数,静态初始值设定项,最终类/方法等… |
    | 只能在Spring容器管理的bean上实现 | 可以在所有领域对象上实施 |
    | 仅支持方法执行切入点 | 支持所有切入点 |
    | 代理是针对目标对象创建的,并且方面已应用于这些代理 | 在应用程序执行之前(运行时之前)将方面直接编织到代码中 |
    | 比AspectJ慢得多 | 更好的性能 |
    | 易于学习和应用 | 比Spring AOP复杂得多 |

    参考

       / 
      ,