spring aop
前言
三步:
1)、将业务逻辑组件和切面类都加入到容器中;告诉Spring哪个是切面类(@Aspect)
2)、在切面类上的每一个通知方法上标注通知注解,告诉Spring何时何地运行(切入点表达式)
3)、开启基于注解的aop模式;@EnableAspectJAutoProxy
spring aop 前后置通知
https://www.cnblogs.com/hu0529/articles/16340400.html
spring aop 环绕通知
环绕通知可以终止继续执行当前方法
1、样例类:
EventIntercept2
package com.hdx.common.hdxspringinit.aop;
import com.hdx.common.hdxspringinit.annotation.MethodAnnotation;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
/**
* @author EventIntercept2
*/
@Aspect
@Component
public class EventIntercept2 {
/**
* 这里定义了一个总的匹配规则,以后拦截的时候直接拦截log()方法即可,无须去重复写execution表达式
* 定义一个切面
*/
@Pointcut("@annotation(com.hdx.common.hdxspringinit.annotation.MethodAnnotation)")
public void log() {
}
@Before("log()&& @annotation(methodAnnotation)")
public void doBefore(JoinPoint joinPoint, MethodAnnotation methodAnnotation) {
}
@Around("log()&&@annotation(methodAnnotation)")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint, MethodAnnotation methodAnnotation) throws Throwable {
// 继续执行当前方法
return proceedingJoinPoint.proceed();
}
@After("log()")
public void doAfter() {
System.out.println("******拦截后的逻辑******");
}
@AfterReturning("log()")
public void doAfterSuccess() {
System.out.println("拦截后的逻辑:只有切点执行成功才会触发!");
}
@AfterThrowing("log()")
public void doAfterError() {
System.out.println("******拦截后的逻辑:只有切点执行失败才会触发!******");
}
}
2、需要其它实体类
https://www.cnblogs.com/hu0529/articles/16340400.htm
aop原理
【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】
@EnableAspectJAutoProxy 启动获取配置类上面添加此注解表示需要加载aop业务类
1、@EnableAspectJAutoProxy是什么?
AspectJAutoProxyRegistrar
@Import(AspectJAutoProxyRegistrar.class):给容器中导入AspectJAutoProxyRegistrar利用AspectJAutoProxyRegistrar自定义给容器中注册bean;
internalAutoProxyCreator=AnnotationAwareAspectJAutoPrroxyCreator
给容器中注册一个AnnotationAwareAspectJAutoProxyCreator;

2、AnnotationAwareAspectJAutoProxyCreator:
AnnotationAwareAspectJAutoProxyCreator
-> AspectJAwareAdvisorAutoProxyCreator
-> AbstractAdvisorAutoProxyCreator
->AbstractAutoProxyCreator
-> ProxyProcessorSupport
-> implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware
关注后置处理器(在bean初始化完成前后做事情)、自动装配BeanFactory

3:注册AnnotationAwareAspectJAutoProxyCreator















4、创建aop代理

浙公网安备 33010602011771号