美文网首页
注解aop源码分析(2)

注解aop源码分析(2)

作者: 快点给我想个名 | 来源:发表于2020-02-26 20:22 被阅读0次

    上次我们说到AnnotationAwareAspectJAutoProxyCreator类。那我们这次就简单看一下这个类。

    继承结构
    AnnotationAwareAspectJAutoProxyCreator继承结构图
    从图中可以看到,首先其实现了BeanFactoryAware接口,通过该可以获得beanFactory工厂。其次实现了BeanPostProcessor接口,这个接口可以在bean调用init方法前后对bean进行一些处理。所以我们的AnnotationAwareAspectJAutoProxyCreator类目前已经具备了这两个功能。
    接下来我们关注这两点就可以了。
    1. beanFactory的能力

    我们从AnnotationAwareAspectJAutoProxyCreator类的继续关系中查找实现了 beanFactory接口的方法。发现在AbstractAutoProxyCreator类中。

    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        this.beanFactory = beanFactory;
    }
    

    AbstractAutoProxyCreator类又被其继承类AbstractAdvisorAutoProxyCreator重写了 beanFactory的接口

    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        super.setBeanFactory(beanFactory);
        if (!(beanFactory instanceof ConfigurableListableBeanFactory)) {
            throw new IllegalArgumentException(
                    "AdvisorAutoProxyCreator requires a ConfigurableListableBeanFactory: " + beanFactory);
        }
        initBeanFactory((ConfigurableListableBeanFactory) beanFactory);
    }
    

    我们看到在上面的代码中调用了super.setBeanFactory(beanFactory);方法,也就是AbstractAutoProxyCreator类中的方法。之后又调用了initBeanFactory((ConfigurableListableBeanFactory) beanFactory);方法,而这个方法又被其继承类AnnotationAwareAspectJAutoProxyCreator重写

    @Override
    protected void initBeanFactory(ConfigurableListableBeanFactory beanFactory) {
        super.initBeanFactory(beanFactory);
        if (this.aspectJAdvisorFactory == null) {
            this.aspectJAdvisorFactory = new ReflectiveAspectJAdvisorFactory(beanFactory);
        }
        this.aspectJAdvisorsBuilder =
                new BeanFactoryAspectJAdvisorsBuilderAdapter(beanFactory, this.aspectJAdvisorFactory);
    }
    

    在上面的代码中创建了两个类AspectJAdvisorFactory BeanFactoryAspectJAdvisorsBuilder。具体做什么的,我们先不用管,但是估计和aop有关。

    1. BeanPostProcessor的能力
      这个接口中的方法在AbstractAutoProxyCreator类中被实现的。

    现在我们知道如果项目启动,可以根据该@EnableAspectJAutoProxy注解为容器中加入一个类了,那这个类具体是怎么注册初始化的呢?下一篇继续分析

    相关文章

      网友评论

          本文标题:注解aop源码分析(2)

          本文链接:https://www.haomeiwen.com/subject/lxfwchtx.html