springBoot条件配置

本篇介绍下,如何经过springboot的条件配置,控制Bean的建立html

  • 介绍下开发环境
    • JDK版本1.8
    • springboot版本是1.5.2
    • 开发工具为 intellij idea(2018.2)
    • 开发环境为 15款MacBook Pro

前言

不少时候,咱们在公司用springboot做为基础框架开发项目的时候,会碰见建立BeanB的时候,须要BeanA已经建立好了,也就是根据条件来判断,是否建立该BeanB,这边写个教程,给各位做参考java


如何弄条件配置呢?

此次,咱们只在同一个项目内的 @Configuration 配合 @Bean 作演示,实际状况下,比较推荐用类注解 @Component 配合条件注解使用,下面演示的,只是比较经常使用的一些条件配置注解,并不包含全部git

  1. 咱们先建立一个普通的spring-boot项目,记得添加web依赖,不然,项目不会后台运行web

    <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
  2. 建立一个测试条件配置的类(不跟启动类一个目录下,最好单首创建一个目录)spring

    @Configuration
     public class SpecialBeanFactory {
    
    
    	    @Bean
    	    public A buildA(){
    	        return new A();
    	    }
    
    	    @Bean
    	    // 若是存在Bean A,则建立Bean B
    	    @ConditionalOnBean(A.class)
    	    public B buildB(){
    	        return new B();
    	    }
    
    	    @Bean
    	    // 目录下犹如包含E.class 则建立Bean C
    	    @ConditionalOnClass(E.class)
    	    public C buildC(){
    	        return new C();
    	    }
    
    	    @Bean
    	    @ConditionalOnMissingClass(value = "W")
    	    public D buildD(){
    	        return new D();
    	    }
    
    
    	    @Bean
    	    // 若是不存在Bean E 那么建立Bean F
    	    @ConditionalOnMissingBean(E.class)
    	    public F buildF(){
    	        return new F();
    	    }
    
    	    @Bean
    	    // 属性文件若是存在 key=hexiaowu value= nan 的则建立BeanH
    	    @ConditionalOnProperty(value = "hexiaowu",havingValue = "nan")
    	    public H buildH(){
    	        return new H();
    	    }
     }
  3. 而后咱们在启动下启动类,会看到以下日志springboot

    2018-10-18 20:08:49.732  INFO 24960 --- [           main] com.example.conditionBase.vo.A           : 建立 A
    2018-10-18 20:08:49.733  INFO 24960 --- [           main] com.example.conditionBase.vo.B           : 建立 B
    2018-10-18 20:08:49.734  INFO 24960 --- [           main] com.example.conditionBase.vo.C           : 建立 C
    2018-10-18 20:08:49.735  INFO 24960 --- [           main] com.example.conditionBase.vo.D           : 建立 D
    2018-10-18 20:08:49.736  INFO 24960 --- [           main] com.example.conditionBase.vo.F           : 建立 F
  4. 打印上面日志,说明条件配置生效了框架


关于条件配置

使用条件配置,咱们须要配置的东西不多,也就新增条件配置注解ide

条件配置官方文档地址以下: 条件配置官方文档spring-boot

注解 使用
@ConditionalOnBean 若是注解内的Bean存在,那么则建立注解类或者方法返回的Bean
@ConditionalOnClass 若是注解内classpath下存在某个class,那么建立注解类或者方法返回的Bean
@ConditionalOnMissingClass 若是注解内classpath没有该class名称,那么建立注解类或者方法返回的Bean
@ConditionalOnMissingBean 若是注解内的Bean不存在,那么建立注解类或者方法返回的Bean
@ConditionalOnProperty 若是属性文件内,包含注解内对应的属性名称跟值,那么建立注解类或者方法返回的Bean

注意

注意: 在配合 @Bean 注解跟条件注解使用建立Bean的时候,须要注意的是, @Bean 注解是跟@Configuration 注解配合外部配置的,也就是跟 @ComponentScan 扫描有不一样的区别,扫描会有依赖(生成一个有向图的依赖,我的猜想,没具体研究过源码),可是 @Bean 却没有, 例如: 在配置注解 @Configuration 类下 建立B Bean,须要A Bean不存在,若是建立B Bean的方法在建立A Bean前面,那么B跟A都会建立,若是建立A在建立B前面,那边B则不会建立,须要注意,若是是经过扫描的,则不用担忧这点,工具


结束语

本次介绍的,只是比较经常使用的,并无介绍全,例如: 自定义条件配置,以及资源条件配置等,并未介绍,下篇介绍

项目源码,我已经上传到gitee 须要的朋友,能够本身点击查看 springboot条件配置

到这,文章就结束了!

以上,均为本人测试而得出的结果,可能会有出入,或者错误,欢迎指正

欢迎转载,请注明出处跟做者,谢谢!

相关文章
相关标签/搜索