一、作用
@Configuration是用来代替传统的xml的配置方式配置bean的。
二、不加@Configuration注解不能配置bean吗
能。
三、加与不加的区别
3.1、区别
加了@Configuration注解,会为配置类创建cglib动态代理,@Bean方法的调用就会通过容器getBean进行获取,保证当@Bean方法进行互调时,@Bean是单例的。
3.2、原理
(1)创建Spring上下文的时候会注册一个解析配置的处理器ConfigurationClassPostProcessor;
(2)调用invokeBeanFactoryPostProcessors(beanFactory)时,就会去调用postProcessBeanDefinitionRegistry进行解析配置(解析加了@Configuration、@Component、@Import、@Bean的类,目的是为了注册BeanDefinition)
(3)ConfigurationClassPostProcessor.postProcessBeanFactory去创建cglib动态代理;
(4)当@Bean方法进行互调时,会通过cglib进行增强,通过调用的方法名作为bean的名称去IOC容器中获取,进而保证了@Bean方法的单例,