前文介绍了Spring AOP
的一些概念,本文主要介绍Spring AOP
的使用方式:基于注解和xml配置
代理原则
Spring AOP
框架对 AOP
代理类的处理原则是:如果目标对象的实现类实现了接口,Spring AOP
将会采用 JDK 动态代理来生成 AOP
代理类;如果目标对象的实现类没有实现接口,Spring AOP
将会采用 CGLIB
来生成 AOP
代理类(可以强制使用CGLIB
生成代理,设置proxy-target-class=true
)
注解配置
注解配置AOP(使用 AspectJ
类库实现的),大致分为三步:
- 使用注解
@Aspect
来定义一个切面,在切面中定义切入点@Pointcut
,通知类型@Before
,@AfterReturning
,@After
,@AfterThrowing
,@Around
- 开发需要被拦截的类(普通的业务逻辑)
- 将切面配置到xml中,也可以使用自动扫描Bean的方式,这样切面bean交由
Spring IOC
容器管理。
注意:Spring
只是使用了和 AspectJ
一样的注解,底层依然使用的是 Spring AOP
,依然是在运行时动态生成代理
- 依赖jar包
要想使用@Aspect
注解,需要引用 aspectJ
的jar包: aspectjweaver.jar
和 aspectjrt.jar
|
|
- 定义接口
|
|
- 目标类
|
|
- 切面类`
|
|
@Aspect
:意思是这个类为切面类@Componet
:因为作为切面类需要Spring
管理起来,所以在初始化时就需要将这个类初始化加入Spring IOC
的管理;@Befoe
:切入点的逻辑(Advice
)execution
…:切入点语法
- 启动注解
|
|
- 执行结果
|
|
xml配置
使用xml
配置aop
需要用到标签:<aop:config>
- 配置
|
|
- 执行结果
|
|