在SpringBoot中可以通过@Configuration对某个类注解将该类申明为配置类,以此在代替先前spring版本中配置xml中的功能,并且增加了可读性与维护性。并且在注解类中的类方法中可以通过@Bean对该类方法返回的对象注入到Spring容器中,其方法名也是该对象在spring容器中的对象名。

//简单的配置类及对象注入到spring容器中。
@Configuration
public class DemoConfiguration {
@Bean()
public String demoObj(){
return "demoObj";
} //底层采用DefaultParameterNameDiscoverer类,可获取到容器中bean-name为demoObj的对象
@Bean()
public String demoObj2(String demoObj){
return "demoObj2"
}
}

  然而我们在自定义配置类往往需要有更大的灵活性,以适应不同场景下的不同装配规则,当然SpringBoot也有考虑到这一点,也为我们提供了一系列的关于Configuration的条件类注解,以助于我们更好的编写出灵活的装备类。比如我们可以根据在classpath中是否具有某个类而决定是否进行装配,又或者说可以根据容器中是否已经具有某个bean后而决定是否进行装配等。以下将列出在Configuration中经常伴随着使用的条件注解。

条件配置注解 注解说明
@ConditionalOnBean 当Spring容器中具有某个Bean时才进行装配
@ConditionalOnClass 当classpath中存在某个对象时才进行装配
@ConditionalOnCloudPlatform 当处于SpringCloud环境时才进行装配
@ConditionalOnExpression 当SpEL表达式返回true时才进行装配
@ConditionalOnJava 当java版本为指定的版本时才进行装配
@ConditionalOnJndi 当有通过JNDI加载资源时才进行装配
@ConditionalOnMissingBean 当Spring容器中不具有某个Bean时才进行装配
@ConditionalOnMissingClass 当classpath中不存在某个对象时才进行装配
@ConditionalOnNotWebApplication 当不是处于WebApp环境时才进行装配
@ConditionalOnProperty 在Environment下具有某个配置信息时才进行装配
@ConditionalOnResource 当classpath下具有某个资源信息(全路径)时才进行装配
@ConditionalOnSingleCandidate 指定的class类在spring容器中只存在一个时才进行装配
@ConditionalOnWebApplication 当处于WebApp环境时才进行装配
@ConditionalOnRepositoryType 当特定类型的spring Data JPA启用的时候才进行装配

  以上注解信息分别在spring包spring-boot-autoconfigure-2.0.1.RELEASE.jar中的org.springframework.boot.autoconfigure.condition路径中。该注解即可以注释在类配置上,也可以注释在类方法上以便对整个装配范围的颗粒度做更好的选择

  但是需要注意的是,JAVA在进行编译时会有编译期的检查,所以在使用了@ConditionalOnClass和@ConditionalOnMissingClass的时候编译时需要确保所指定的class在classpath中存在,否则会报编译期的异常。而在外部引用时不需要确保其class是否存在于classpath。因为jvm是按需读取class,当遇到遇到的class时才会调用classloader进行读取存入方法区中。而如果读取不到其会被@ConditionalOnClass与@ConditionalOnMissingClass对应的处理类感知到,并且使该注解下的配置类不进行具体的装配从而起到效果。

  有时候单单只使用配置条件类注解仍然无法满足某些特定的需求,比如说需要按照某个加载顺序进行装配类加载,这时候就需要配置顺序类对配置类进行注解来达到这种效果。

顺序配置注解 注解说明
@AutoConfigureAfter 在某个配置类装配后才进行装配
@AutoConfigureBefore 在某个配置类装配前先提前装配
@AutoConfigureOrder 定义装配顺序,其值越低配置优先级越高

  需要注意的是该注解类只能作用于配置类上以调整装配的执行顺序。

SpringBoot之Configuration的更多相关文章

  1. Springboot 在@Configuration注解的勒种 使用@Autowired或者@value注解 读取.yml属性失败

    springboot中@value注解,读取yml属性失败 问题场景: 配置ShrioConfig时,想注入.yml的参数进行配置 解决办法: 如果注释掉shiroEhcacheManager 以下所 ...

  2. 14 - springboot的@Configuration、@Bean、@Import()、@ImportResource()、@Conditional说明

    1.@Configuration.@Bean.@Import().@ImportResource().@Conditional 分析源码的时候总会见到标题中的这几个注解,因此:弄一篇博客来说明一下吧, ...

  3. IDEA SpringBoot Deprecated configuration property ‘server.servlet-path’

    错误样式如图所示.说我这个版本中的这个标签是过时的. 解决: 出现这个问题后,这个标签被IDEA化成了黄线,同时,想使用server.servlet-path=*.html,配置servlet路径跳转 ...

  4. springboot的@Configuration文件读取static静态文件

    错误 正确

  5. SpringBoot学习之自动依赖

    在前面使用SSM集成时,我们可以使用注解实现无配置化注入,但是这种依赖被进行“人工干预了的”,换句话就是说我们手动进行装配,那么此时还没有达到SpringBoot这种自动装配的效果,那么究竟Sprin ...

  6. Spring生态研习【四】:Springboot+mybatis(探坑记)

    这里主要是介绍在springboot里面通过xml的方式进行配置,因为xml的配置相对后台复杂的系统来说,能够使得系统的配置和逻辑实现分离,避免配置和代码逻辑过度耦合,xml的配置模式能够最大限度的实 ...

  7. SpringBoot配置RestTemplate的代理和超时时间

    application.properties: #代理设置 proxy.enabled=false proxy.host=192.168.18.233 proxy.port=8888 #REST超时配 ...

  8. SpringBoot学习之自动装配

    在前面使用SSM集成时,我们可以使用注解实现无配置化注入,但是这种依赖被进行“人工干预了的”,换句话就是说我们手动进行装配,那么此时还没有达到SpringBoot这种自动装配的效果,那么究竟Sprin ...

  9. 微服务深入浅出(1)-- SpringBoot

    基于Spring的开发框架,旨在简化配置快速开发,是新一代web开发框架.下面介绍一下常用的几个功能: 1.Spring单元测试 针对DAO层 (1) @RunWith(Spring.class),表 ...

随机推荐

  1. Vue中你可能认为是bug的情况原来是这样的

    前言 我们知道Vue框架剧本双向数据绑定功能,在我们使用方便的同时,还有一些细节问题我们并不知道,接下来一起探讨一些吧 双向数据绑定 js变量改变影响页面 页面改变影响js变量 Vue2是如何做到数据 ...

  2. 虚拟机中给linux 系统添加硬盘以后,进行分区挂载

    当自己虚拟机中的linux 系统硬盘不够用的时候需要添加硬盘给系统使用,所以可以通过以下的步骤实现 1.关闭自己的客户机,然后执行以下步骤 2. 上面的步骤完成以后,重点来了,下面打开客户机,执行以下 ...

  3. 阿里云K8S下玩.NET CORE 3.1

    1. 创建阿里云K8S集群,本文以标准托管集群为例 1.1 创建一个 2台 centos 2core 4G的 k8s 集群 1.2 创建成功的模样 2. 创建 asp.net core webapi项 ...

  4. CSS 如何实现当鼠标放在上面时整行变色呢?

    摘要:下文讲述css中实现鼠标放在指定行上面时,整行变色的方法分享,如下所示: 实现思路:使用:hover伪类,实现当鼠标指向时,其背景色发生相应的变化,如下例所示: 例: 下文中的div,当鼠标放上 ...

  5. UVA-1588

    只用C来写 题目:https://vjudge.net/problem/UVA-1588 #include<stdio.h> #include<string.h> #defin ...

  6. kali安装后中文乱码

    参考: 文章一:https://blog.csdn.net/dust_hk/article/details/103299136?depth_1-utm_source=distribute.pc_rel ...

  7. JAVA控制流程

    Java代码有三种执行结构流程,顺序结构.分支结构.循环结构 顺序结构 顺序结构是最简单的代码执行结构,从代码开始逐步执行每一句代码到结束 public class C { public static ...

  8. 论文阅读笔记(十九)【ITIP2017】:Super-Resolution Person Re-Identification With Semi-Coupled Low-Rank Discriminant Dictionary Learning

    Introduction (1)问题描述: super resolution(SP)问题:Gallery是 high resolution(HR),Probe是 low resolution(LR). ...

  9. spring gzip 静态压缩优化

    HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览.相对 于普通的浏览过程HTML ,CSS,Java ...

  10. linq to sql 比较字符串形式的时间

    where Convert.ToDateTime(t.Date.Trim()).CompareTo(Convert.ToDateTime("2009/9/9")) >= 0 ...