0
点赞
收藏
分享

微信扫一扫

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配


学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配

条件装配的应用场景就是:
当发现容器中没有A组件的时候,那么这个组件也不要帮我自动装配。
当我们满足注解里面写的条件的时候,才给容器里面注册组件。
@Conditional是一个父组件,下面有很多个派生组件。
例如:@ConditionalOnBean

先不使用注解@ConditionalOnBean

两个组件单独互不影响。

根据组件名字来测试容器中是否有该组件:

现在默认组件名就是方法名。user01和cat

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_应用场景

情况1:两个组件都存在:

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_自动装配_02


学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_应用场景_03

2、情况2:cat组件没有,但是User组件有

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_spring_04


学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_springboot2_05

使用注解@ConditionalOnBean让两个组件的自动化配置关联起来。

情况3:两个组件独有

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_spring_06


学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_自动装配_07

情况4:user01组件没有。

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_自动装配_08


那么两个组件都应该是没有的。

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_springboot2_09

因为cat01组件有没有需要看user01组件有没有来决定。
因为cat01方法上面写了注解:
@ConditionalOnBean(name = “user01”)
这个注解的意思就是:
看容器中是否有组件名为user01的。有的话,那么cat01也会自动装配。
没有的话,cat01也不会自动装配。

这里我的程序目前看似有个bug

如果:下面这种情况,两个组件都应该要有的。

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_应用场景_10


但是结果就是显示没有user组件

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_自动装配_11


这个现象非常的诡异!!!无法去解释!!!这种情况下,两个组件都应该没有。

学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_自动装配_12


学习springboot2的第3天(2021-12-02)10-底层注解-@Conditional条件装配_springboot2_13


举报

相关推荐

0 条评论