Spring6 探析之@Configuration 注解
介绍
@Configuration 注解大家都不陌生,该注解有以下特点
- 必须在类上使用
- 能够将被注解的类加载到IOC容器里
- 能够将类中被@Bean注解标记的方法加载到IOC容器里
@Configuration 有一些参数,其中最值得关注的是proxyBeanMethods
,该参数值默认为true
- 参数为true时,为单例模式,每次从IOC拿到的都是同一个对象
- 参数为false时,为原子模式,每次拿到的是不同的对象
下面是 @Configuration 注解的源码:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
@AliasFor(annotation = Component.class)
String value() default "";
boolean proxyBeanMethods() default true;
boolean enforceUniqueMethods() default true;
}
其中,value
参数也是常用的一种,作用是为IOC中的实例指定 bean id
验证 proxyBeanMethods 参数
可以使用以下代码验证 proxyBeanMethods 参数,其中,代码中 Config.class 类为被@Configuration 标注的类,Person 为任意的bean对象
- 当proxyBeanMethods=true 时,输出 true,代表从IOC中拿到了相同的实例
- 当proxyBeanMethods=false时,输出false,代表从IOC中拿到了不同的实例