Spring基于注解方式的AOP的原理流程和源码分析【一】

 

废话不多说直接上源码:

Bean

public class MathDiv {

    public int div(int i,int j){
        return i/j;
    }

}

LogAspects

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class LogAspects {
    @Pointcut("execution(public  int spring.yitian.bean.MathDiv.*(..))")
    private void poindCut(){}

    @Before("poindCut()")
    public  void  before(){
        System.out.println("除法之前");
    }

}

ConfigOfAop

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import spring.yitian.bean.LogAspects;
import spring.yitian.bean.MathDiv;

@Configuration
@EnableAspectJAutoProxy
public class ConfigOfAop {

    @Bean("MathDiv")
    public MathDiv getMathDiv(){
        return new MathDiv();
    }
    @Bean("LogAspects")
    public LogAspects getLogAspects(){
        return new LogAspects();
    }
}

测试类

import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import spring.yitian.bean.MathDiv;
import spring.yitian.config.ConfigOfAop;

/**
 * AnnotationAwareAspectJAutoProXyCreator
 */
public class MainOfAopTest {

    @Test
    public void test01(){
        AnnotationConfigApplicationContext applicationContext=new
                AnnotationConfigApplicationContext(ConfigOfAop.class);
        MathDiv mathDiv=(MathDiv) applicationContext.getBean("MathDiv");
        mathDiv.div(1,1);


    }

}

@EnableAspectJAutoProxy

  • 有没有注册组件   组件什么时候工作   组件的功能是什么

  • https://blog.csdn.net/qq_27529917/article/details/78454801链接查看

  • @EnableAspectJAutoProxy注解点进去,

  • 下面这一步是internalAutoProxyCreator=AnnotationAwareAspectJAutoProXyCreator(注解装配模式的切面自动代理创建器)

  • AnnotationAwareAspectJAutoProxyCreator

    • --》AspectJAwareAdvisorAutoProxyCreator

      • --》AbstractAdvisorAutoProxyCreator

        • --》AbstractAutoProxyCreator

    • 分析继承类 AbstractAutoProxyCreator其中有setBeanFactory()方法bean工厂   【打断点】

    • AbstractAutoProxyCreator.postProcessBeforeInstantiation   后置处理器的逻辑 【打断点】

    • AbstractAdvisorAutoProxyCreator.setBeanFactory()-->initBeanFactory() 【打断点】

    • AnnotationAwareAspectJAutoProxyCreator.initBeanFactory() 【打断点】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值