aop
程序员文章站
2022-07-12 14:19:07
...
aop api
1、 熟悉api
2、 参透运行机制
3、 收缩、逐步扩展
spring aop
1、 api怎么写?
Chapter 6. Aspect Oriented Programming with Spring
切面: PointCut(切点: joinPoint的集合)+ 通知(Advice)方式+ 通知(Advice)增强代码
定义切点:
注解定义Aspect
1、定义Pointcut切点
2、 定义增强方法
3、 通知方式将 增强方法和Pointcut绑定起来
4、 完整示例
@Aspect
public class BeforeExample {
// 切面 = 增强方法+通知方式+Pointcut切点
@Before("execution(* com.xyz.myapp.dao.*.*(..))") # 通知方式+Pointcut切点
public void doAccessCheck() { // 增强方法
// ...
}
}
5、 单独定义Pointcut切点
@Pointcut("execution(* transfer(..))")// the pointcut expression
private void anyOldTransfer() {}// the pointcut signature
schema定义Aspect
<aop:aspect>
定义Aspect类, 类似于@AspectJ注解的类
<aop:config>
<aop:aspect id="myAspect" ref="aBean"> # 将通知增强类和 通知方式+Pointcut绑定
# 1、 定义Pointcut
# 2、 将Pointcut和通知增强类的增强方法绑定; 并指定通知方式
...
</aop:aspect>
</aop:config>
<bean id="aBean" class="..."> # 通知增强类; 定义了通知增强方法
...
</bean>
schema定义Aspect完整示例
<aop:config>
# 将通知增强类和 通知方式+Pointcut绑定
<aop:aspect id="concurrentOperationRetry" ref="concurrentOperationExecutor">
# 定义Pointcut(切点)
<aop:pointcut id="idempotentOperation"
expression="execution(* com.xyz.myapp.service.*.*(..))"/>
# 将增强类的增强方法和切点绑定且指定通知方式
<aop:around
pointcut-ref="idempotentOperation"
method="doConcurrentOperation"/>
</aop:aspect>
</aop:config>
# 增强类
<bean id="concurrentOperationExecutor"
class="com.xyz.myapp.service.impl.ConcurrentOperationExecutor">
<property name="maxRetries" value="3"/>
<property name="order" value="100"/>
</bean>
拦截请求
借助spring aop拦截请求
下一篇: AOP