配置文件注入这一部分内容主要有以下几点内容:

1.全局配置文件值注入

2.自定义配置文件值注入

3.自定义的Spring 配置文件生效

(1)首先介绍全局配置文件的值注入,全局配置文件值注入有两种方式,第一种是使用@ConfigurationProperties注解,另外一种是使用@Value注解,这两个注解默认是从全局配置文件(application.yml/properties)中获取属性的值。

@ConfigurationProperties用法如下,它会将前缀为指定值的属性的值赋给Bean中相应的字段,但是必须注意的是这个Bean必须是容器中的一个组件。这个注解不光可以用在类上面也可以配合@Bean用在方法上,还可以和@EnableConfigurationProperties 搭配使用,具体可以参照:https://blog.csdn.net/andy_zhang2007/article/details/78761651 这篇文章,有详细的介绍。总之,@ConfigurationProperties可以为容器中的组件的属性注入值。

package com.springboot.entity;

import java.util.Date;
import java.util.List;
import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; @Component
@ConfigurationProperties(prefix="person")
public class Person {
private String lastName;
private Integer age;
private boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private dog dog;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public dog getDog() {
return dog;
}
public void setDog(dog dog) {
this.dog = dog;
}
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
} }

@Value 注解的使用方法如下,它会将配置文件中的值赋给被添加注解的变量。

@Value("${person.lastName}")
private String Name;

这两种方法的区别是:

如果只需要获取少量的配置文件值,可以使用@Value注解,如果要整个注入JavaBean的值,那就使用@ConfigurationProperties注解一次性给所有Bean的属性赋值。

(2)自定义配置文件值的注入

如果想要将与系统配置无关的一直业务配置从全局配置文件中剥离出来,单独作为一个配置文件,那就可以使用@PropertySource注解,它可以将自定义的配置文件的属性值注入到JavaBean的属性中

@PropertySource(value = {"classpath:person.properties"})
public class Person {
@Value("${person.name}")
private String lastName;

上面的示例指定了自定义的配置文件的位置是类路径下的person.properties 文件,并且将改文件的person.name 赋给 lastName;但是这里有一点需要特别注意,由于@ConfigurationProperties支持松散语法,如果项目中同时存在@ConfigurationProperties和@PropertySource两种注入方式,且自定义的配置文件和全局配置文件中的属性符合松散绑定规则,那将取全局配置文件的属性。如全局配置文件中有last-name 和lastName 是一样的。

上面几种方式给JavaBean注入值的时候还支持校验,官方文档的24.7.5章节有介绍,具体做法是在JavaBean是使用@Validated注解开启校验,并在Bean的属性上注意添加@NotNull,@Email 等JSR303校验规则。

(3)将自定义的spring 配置文件注入

如果我们希望将自己定义的另外一些组件添加到容器中,可以有两种方式。

一种是使用@Configuration 类标记为配置类,在配置类中使用@Bean注解声明我们的组件,并在主程序类将配置类通过@Import({ MyConfig.class, MyAnotherConfig.class })注入到容器中方式实现。

第二种就是编写一个spring的配置文件,在主程序类中通过@ImportResource(locations = {"classpath:beans.xml"})将自己定义的配置文件中的组件注入到容器中。(beans.xml即为我们自定义的配置文件。)

spring boot-5.配置文件注入的更多相关文章

  1. Spring Boot之配置文件值注入(@ConfigurationProperties)

    前言:Spring Boot配置文件值的注入有两种方式,分别是 @ConfigurationProperties @Value 这里我们使用第一种 首先我们创建一个application.yml文件, ...

  2. Spring Boot(二) 配置文件

    文章导航-readme 一.配置Spring Boot热部署     技术的发展总是因为人们想偷懒的心理,如果我们不想每次修改了代码,都必须重启一下服务器,并重新运行代码.那么可以配置一下热部署.有了 ...

  3. 一:Spring Boot 的配置文件 application.properties

    Spring Boot 的配置文件 application.properties 1.位置问题 2.普通的属性注入 3.类型安全的属性注入 1.位置问题 当我们创建一个 Spring Boot 工程时 ...

  4. Spring Boot 核心配置文件 bootstrap & application

    Spring Boot 核心配置文件 bootstrap & application 1.SpringBoot bootstrap配置文件不生效问题 2.bootstrap/ applicat ...

  5. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件

    精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件 内容简介:本文介绍 Spring Boot 的配置文件和配置管理,以及介绍了三种读取配置文 ...

  6. Spring Boot 的配置文件application.properties

    Spring Boot 中的application.properties 是一个全局的配置文件,放在src/main/resources 目录下或者类路径的/config下. 作为全局配置文件的app ...

  7. Spring根据XML配置文件注入对象类型属性

    这里有dao.service和Servlet三个地方 通过配过文件xml生成对象,并注入对象类型的属性,降低耦合 dao文件代码: package com.swift; public class Da ...

  8. Spring boot 使用@Value注入属性

    Spring boot 使用@Value注入属性 学习了:http://blog.csdn.net/hry2015/article/details/72353994 如果启动的时候报错: spring ...

  9. Spring Boot属性配置文件:application.properties 详解

    学习资料 网址 官方说明文档 https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-pro ...

  10. spring boot全局配置文件优先级

    前两篇介绍的application配置文件,即为spring boot全局配置文件.那么spring boot加载配置文件的时候,怎么确定加载哪个目录下哪个文件呢? spring boot默认的配置文 ...

随机推荐

  1. vue实现v-model父子组件间的双向通信

    首先讲清楚有个缺点:父页面若同时使用多个子组件,永远只会只能实现第一个双向驱动,我是新手,还在研究.如果有高手请指教,感谢! 子组件 <script> export default { m ...

  2. tensorboard的log查看方法

    使用:tensorboard --logdir=D:\LOG logs --host=127.0.0.1

  3. VS Code 最好用的 Markdown 插件

    对经常使用 Markdown 写东西的工程师来说找到称手好用的 Markdown 编辑器非常重要. 目前为止 VS Code 最好用的插件是 Markdown Preview Enhanced . 各 ...

  4. R_针对churn数据用id3、cart、C4.5和C5.0创建决策树模型进行判断哪种模型更合适

    data(churn)导入自带的训练集churnTrain和测试集churnTest 用id3.cart.C4.5和C5.0创建决策树模型,并用交叉矩阵评估模型,针对churn数据,哪种模型更合适 决 ...

  5. idea 更新后和新的直接安装前,都需要配置 idea64.exe.vmoptions 后再使用

    配置合适的参数提升性能,默认的性能不高

  6. java期末课程总结

    期末课程总结 转眼间,这个学期就要过去了,我们Java的学习也接近了尾声,回想到这个学期刚开始接触到Java的时候,感觉什么都不懂,但现在似乎有了门路,不会载懵懵懂懂, 虽然本学期面向对象与Java程 ...

  7. npm安装 syscall access

    npm WARN deprecated bower@1.8.4: We don't recommend using Bower for new projects. Please consider Ya ...

  8. 一起学vue指令之v-html

    一起学vue指令之v-html 一起学 vue指令 v-html  指令可看作标签属性 某些情况下,我们点击百度搜索下一页,服务器应该就返回下一页的数据页面,包含其他资源链接等. 返回的数据的本质是一 ...

  9. layer实现关闭弹出层刷新父界面功能详解

    本文实例讲述了layer实现关闭弹出层刷新父界面功能.分享给大家供大家参考,具体如下: layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会 ...

  10. leetcode 72. 编辑距离

    /***** 定义状态: DP[i][j]其中i表示word1前i个字符,j表示Word2前i个字符 DP[i][j]表示单词1前i个字符匹配单词2前j个字符,最少变换次数: 状态转移: for i: ...