@import常用于写在config文件,写于开头,全局声明,然后所在目录下均能导入
写在方法中间不可用,爆红
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = true)
public class Myconfig {
@Bean
public User User_component01(){
User zhangsan=new User("zhangsan",22);
zhangsan.setPet(tomcat02());
return zhangsan;
}
@Bean
public Pet Cat_component01(){
return new Pet("tomcat");
}
@Bean("tom")
public Pet tomcat02(){
return new Pet("tom");
}
}
这是配置信息
主程序加上这几句可以看看效果
String []demonames=run.getBeanNamesForType(User.class);
for (String name:demonames
) {
System.out.println(name);
}
//看看import效果
DBHelper Dbhelper=run.getBean(DBHelper.class);
System.out.println(Dbhelper);
运行结果
------------------
User_component01
com.pianxian1.bean.User
ch.qos.logback.classic.db.DBHelper@2c30b71f
可以看出分别取自bean包下,Myconfig包下的@bean声明下新组件,以及同一文件下别的地方装的包下的任意类(外部库随便找的)组件
检验
@ConditionalOnBean(name="tom")
在配置文件开头,即单个容器中包含“tom”才让配置文件里的@Bean存在
主程序代码
Boolean bean1=run.containsBean("tom");
System.out.println("tom存在"+bean1);
Boolean bean2=run.containsBean("User_component01");
System.out.println("User01存在"+bean2);
配置文件
@Configuration(proxyBeanMethods = true)
//@ConditionalOnMissingBean(name="tom")
@ConditionalOnBean(name="tom")
public class Myconfig {
@Bean
public User User_component01(){
User zhangsan=new User("zhangsan",22);
zhangsan.setPet(tomcat02());
return zhangsan;
}
@Bean
public Pet Cat_component01(){
return new Pet("tomcat");
}
//@Bean("tom")//tomcat02
public Pet tomcat02(){
return new Pet("tom");
}
}
注意2020版本会输出false
2024IDEA会直接爆红,说User01这个容器找不到(因为不满足@conditionOnBean这个注解)