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代理

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-06-03 19:12  银河系的极光  阅读(128)  评论(0)    收藏  举报