springboot开发日记(5)——@Conditional注解

@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这一组件。

posted @ 2023-02-07 20:37  YTARO  阅读(55)  评论(0)    收藏  举报