@Configuration
1.作用:
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext
或者
AnnotationConfigWebApplicationContext
类进行扫描,并用于构建bean定义,初始化Spring容器。
2.注意点
/**
- 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
- 2、配置类本身也是组件
- 3、proxyBeanMethods:代理bean的方法
- Full(proxyBeanMethods = true)(保证每个@Bean方法被调用多少次返回的组件都是单实例的)(默认)
- Lite(proxyBeanMethods = false)(每个@Bean方法被调用多少次返回的组件都是新创建的)
*/
代码片段:
@Configuration(proxyBeanMethods = true)
public class MyConfig {
@Bean
public People people01(){
People zs = new People("zs", 18,pet01());
return zs;
}
@Bean
public Pet pet01(){
Pet tomcat = new Pet("tomcat");
return tomcat;
}
}
public static void main(String[] args) {
//返回IOC容器
ConfigurableApplicationContext run = SpringApplication.run(DemoApplication.class,args);
//查看容器的组件
String[] names = run.getBeanDefinitionNames();
for (String name : names
) {
System.out.println(name);
}
People people01 = run.getBean("people01", People.class);
System.out.println(people01.toString());
Pet pet01 = run.getBean("pet01", Pet.class);
System.out.println(pet01.toString());
System.out.println(people01.getPet()==pet01);
//此处验证的是通过代理是否为单例模式,单例模式建造的对象在堆中是同一个对象
}
结果: