曹耘豪的博客

Spring之AOP

  1. Spring AOP
    1. Spring 动态代理特点
    2. 有2种实现方式
    3. 使用
      1. Pointcut表达式类型
    4. AspactJ
    5. Spring AOP和AspectJ的区别
  2. | Spring AOP | AspectJ || —
    1. 参考
  3. Aspect顺序

Spring AOP

面向切面编程。

Spring 动态代理特点

有2种实现方式

使用

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复杂得多 |

参考

Aspect顺序

2023-06-09

使用Order配置顺序,值越小越在外层

   / 
  ,