@Configuration
@Configuration 注解,与Spring中的 @Configuration 一样。
基本使用:
- Full模式与Lite模式
- 最佳实战
- 配置类的 组件之间无依赖关系 用Lite模式加速容器启动过程,减少判断
- 配置类的 组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式。
解释:
- Full 模式,会保证实例的唯一性,即每次都会检查容器中是否存在对应的组件,然后在进行创建(即,单实例模式)。
- Lite 模式: 不检查,直接创建。
#############################Configuration使用示例######################################################
@Configuration(proxyBeanMethods = true)
public class MyConfig {
@Bean
public User user01(){
User zhangsan = new User("zhangsan", 18);
zhangsan.setPet(tomcatPet());
return zhangsan;
}
@Bean("tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
User user = bean.user01();
User user1 = bean.user01();
System.out.println(user == user1);
}
}
注: @Bean:功能为注册组件,等同于SpringXML中的 <bean id="" class=""> ,默认使用方法名作为组件名,可通过 @Bean(“ABC”) 指定。
@Import
@Import({User.class, DBHelper.class})
public class Test{
}
自动创建出两个组件
@Conditional
条件装配:满足Conditional指定的条件,则进行组件注入
=====================测试条件装配==========================
@Configuration(proxyBeanMethods = false)
@ConditionalOnBean(name = "tom")
public class MyConfig {
@Bean
public User user01(){
User zhangsan = new User("zhangsan", 18);
zhangsan.setPet(tomcatPet());
return zhangsan;
}
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
boolean tom = run.containsBean("tom");
System.out.println("容器中Tom组件:"+tom);
boolean user01 = run.containsBean("user01");
System.out.println("容器中user01组件:"+user01);
}
注:
- 因为不存在 tom 组件,所以也不会去注册 user01 组件。
- @ConditionalOnBean 写在方法上,对类中的所有方法生效。也只写在指定的方法上。
@ImportResource
引入Spring 的 xml 配置文件。
如:resources 目录下有一个名为 a.xml 的Spring注册配置文件 而由于没有配置,所以SpringBoot无法识别 a.xml,自然a.xml中的bean就没法注册进去。因此可以考虑使用 @ImportResource 来引入该xml文件
@ImportResource("classpath:a.xml")
public class MyConfig{
}
|