SpringBoot之Configuration

在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的更多相关文章
- Springboot 在@Configuration注解的勒种 使用@Autowired或者@value注解 读取.yml属性失败
springboot中@value注解,读取yml属性失败 问题场景: 配置ShrioConfig时,想注入.yml的参数进行配置 解决办法: 如果注释掉shiroEhcacheManager 以下所 ...
- 14 - springboot的@Configuration、@Bean、@Import()、@ImportResource()、@Conditional说明
1.@Configuration.@Bean.@Import().@ImportResource().@Conditional 分析源码的时候总会见到标题中的这几个注解,因此:弄一篇博客来说明一下吧, ...
- IDEA SpringBoot Deprecated configuration property ‘server.servlet-path’
错误样式如图所示.说我这个版本中的这个标签是过时的. 解决: 出现这个问题后,这个标签被IDEA化成了黄线,同时,想使用server.servlet-path=*.html,配置servlet路径跳转 ...
- springboot的@Configuration文件读取static静态文件
错误 正确
- SpringBoot学习之自动依赖
在前面使用SSM集成时,我们可以使用注解实现无配置化注入,但是这种依赖被进行“人工干预了的”,换句话就是说我们手动进行装配,那么此时还没有达到SpringBoot这种自动装配的效果,那么究竟Sprin ...
- Spring生态研习【四】:Springboot+mybatis(探坑记)
这里主要是介绍在springboot里面通过xml的方式进行配置,因为xml的配置相对后台复杂的系统来说,能够使得系统的配置和逻辑实现分离,避免配置和代码逻辑过度耦合,xml的配置模式能够最大限度的实 ...
- SpringBoot配置RestTemplate的代理和超时时间
application.properties: #代理设置 proxy.enabled=false proxy.host=192.168.18.233 proxy.port=8888 #REST超时配 ...
- SpringBoot学习之自动装配
在前面使用SSM集成时,我们可以使用注解实现无配置化注入,但是这种依赖被进行“人工干预了的”,换句话就是说我们手动进行装配,那么此时还没有达到SpringBoot这种自动装配的效果,那么究竟Sprin ...
- 微服务深入浅出(1)-- SpringBoot
基于Spring的开发框架,旨在简化配置快速开发,是新一代web开发框架.下面介绍一下常用的几个功能: 1.Spring单元测试 针对DAO层 (1) @RunWith(Spring.class),表 ...
随机推荐
- centos7基础配置及基础优化
1 centos7安装及优化 1.1 通过U盘安装物理服务器注意事项(Dell R710) 使用U盘安装centos7,选择UEFI方式安装(最好修改BIOS为传统方式启动),在安装选择选项的 ...
- new function 到底做了什么?如何自己实现new function
前言 这是继function 与 Function 关系后写下的. 写这个起源于,我无聊的时候看到一道题目: 'foo' == new function() { var temp=String('fo ...
- .NET Core MVC 静态文件应用
一.静态文件应用方面 ASP.NET Core 静态文件应用,主要分为两方面:网站访问和静态文件整合 二.案例 1.访问静态文件 我们都知道,在 ASP.NET 项目中,我们的静态文件一般要放在 ww ...
- Tomcat 核心配置
tomcat的核心配置在conf/server.xml中. <Server> 根元素 <Server>即Catalina Servlet组件. <Server por ...
- 基于Struts2开发校园二手购物商城源码
开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySQL数据库 次项目分为管理员和普通用户两种角色 运行效果图 源码及原文链接:https://javadao ...
- STM32固件库和自定义工程模板
固件库结构 本文使用的固件库是STM32F10x_StdPeriph_Lib_V3.5.0,可以在官网获取.该固件库包含四个文件夹和一个库的说明文档,如下图所示,stm32f10x_stdperiph ...
- JN_0019:CMD命令窗口常用操作
1,回到根目录下 cd\ 2,
- Kong Gateway - 11 基于网关服务的ACL访问控制列表 黑名单
Kong Gateway - 11 基于网关服务的ACL访问控制列表 黑名单 同一服务名称 book 不允许即创建白名单访问控制列表又创建黑名单访问控制列表 启用服务的白名单&黑名单配置文件时 ...
- css选择器四大类:基本、组合、属性、伪类
什么是选择器?选择器的作用是通过它可以找到元素,把css样式传递给元素!css选择器主要分为:基本选择器.属性选择器.组合选择器与伪类选择器四个大类! css基本选择器 基本选择器又分为:*通配符.标 ...
- Jetty配置虚拟目录,实现把web项目发布到自定义目录,指定指定上下文访问;jetty编码修改
2019-12-31 17:28:38 一般只需要把Java站点文件夹或*.war文件拷贝到Web Server的webapps文件夹下,即可启动运行该站点,但更多时候,我们并不想拷贝站点,而 ...