首页 > 编程语言 > 详细

@Configuration注解作用和在Spring中的处理

时间:2020-04-01 15:09:45      阅读:455      评论:0      收藏:0      [点我收藏+]

# 作用

首先编写两个类作为测试

package com.fh.cglib;

public class AopService {

    public void query(){
        System.out.println("query");
    }
}
package com.fh.cglib;

public class AopService1 {

    public AopService1(){
        System.out.println("init aopService1...");
    }
}

然后在写个测试用的配置类

package com.fh.cglib;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Component
@Configuration
public class AopConfig {

    @Bean
    public AopService getAopService(){
        getAopService1();
        return new AopService();
    }

    @Bean
    public AopService1 getAopService1(){
        return new AopService1();
    }
}

然后将配置类上的@Configuration去掉和添加分别启动容器,你就会发现AopServoce1的对象初始化调用了两次,对,这就是这个注解的作用

 

# 在Spring中的处理

AbstractApplicationContext#refresh
   AbstractApplicationContext#invokeBeanFactoryPostProcessors
      PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors
        PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors
          ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry
             ConfigurationClassPostProcessor#processConfigBeanDefinitions
               ConfigurationClassUtils#checkConfigurationClassCandidate

根据这个包结构,我们查看到类对注解的处理操作,可以发现是向beanDef中添加了一个属性值

技术分享图片

 

 

 

AbstractApplicationContext#refresh
   AbstractApplicationContext#invokeBeanFactoryPostProcessors
      AbstractApplicationContext#invokeBeanFactoryPostProcessors
         ConfigurationClassPostProcessor#postProcessBeanFactory
            ConfigurationClassPostProcessor#enhanceConfigurationClasses

然后我们根据这个包结构找到了对上面设置的属性做的处理,发现如果是属性设置成full的话,会通过cglib设置一个代理类对象

技术分享图片

 

 

 根据代码中代理对象的设置,发现cglib动态代理添加了一个

EnhancedConfiguration接口,这个接口的父接口为我们提供了BeanFactory属性,还添加了一个方法拦截数组,在方法拦截中做了一些处理,没有直接调用具体的方法,而是通过判断工厂中是否已经存在对象,如果存在对象,直接从BeanFactory中获取,然后返回即可(具体处理没有这么简单)


后续有啥问题再做修改和补充

@Configuration注解作用和在Spring中的处理

原文:https://www.cnblogs.com/nihaofenghao/p/12612437.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!