@Conditional注解
当满足@Conditional中的条件时,才进行组件注入
@Conditional有许多派生注解,例如:
@ConditionalOnBean:当容器中存在指定的bean组件的时候才进行组件注入
@ConditionalOnClass:当容器中存在指定的类才进行组件注入
@ConditionalOnResource:当项目类路径下存在某些资源的时候才进行组件注入
在MyConfig.java中进行修改
@ConditionalOnBean(name="user01")
@Bean("Tom")
public Pet tomscatPet(){
return new Pet("tomcat");
@ConditionalOnBean(name="user01")的作用是只有容器中有名字为user01的组件时才注册组件Tom。
同时在main函数中添加以下语句:
MyConfig bean=run.getBean(MyConfig.class);
System.out.println(run.containsBean("Tom"));
其中run.containsBean("Tom")的作用是在容器中寻找名字为Tom的组件,结果为true,说明成功注册了Tom这一组件。
如果将上面@ConditionalOnBean的条件改为其他,例如111,则main函数执行结果为false,说明没有注册Tom组件。
注意:@ConditionalOnBean严格按照顺序执行。如果把MyConfig.java中的两个bean语句交换顺序:
@ConditionalOnBean(name="user01")
@Bean("Tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}
@Bean//给容器中添加组件,以方法名作为组件的id。返回类型就是组件类型。返回的值就是组件在容器中的实例
public User user01(){
User zhangsan= new User("zhangsan",18);
// zhangsan.setPet(tomcatPet());
return zhangsan;
}
则main函数执行结果仍为false,因为在执行@ConditionalOnBean时容器中还没有注册user01这一组件,也就不会注册Tom组件。但是user01仍然会在这之后继续注册。因此最后容器中只存在user01这一组件。
标签:容器,springboot,Pet,ConditionalOnBean,开发,Tom,组件,日记,user01 From: https://www.cnblogs.com/tarorat/p/17099579.html