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

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. re.compile 函数

    re.compile 函数 compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用. 语法格式为: re.com ...

  2. BZOJ 3173: [Tjoi2013]最长上升子序列 Splay

    一眼切~ 重点是按照 $1$~$n$ 的顺序插入每一个数,这样的话就简单了. #include <cstdio> #include <algorithm> #define N ...

  3. Vue CLi3入门

    摘自:https://www.jianshu.com/p/cf9b56efd3b8 Vue CLi3入门 12018.11.15 14:16:17字数 1222阅读 8895 地址 Vue CLi3 ...

  4. Java连接MQTT服务-tcp方式

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  5. LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)

    题目描述 给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点 ...

  6. C# base64 加密解密

    1.base64  to  string string strPath = "aHR0cDovLzIwMy44MS4yOS40Njo1NTU3L1 9iYWlkdS9yaW5ncy9taWR ...

  7. docker 安装kafka(快速)

    下载镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 启动镜像 docker run -d --name zoo ...

  8. Removing jQuery from GitHub.com frontend

    Removing jQuery from GitHub.com frontend Web standards in the later years Over the years, GitHub gre ...

  9. cmd 查看域名对应的 IP

    1.cmd nslookup 2.输入 域名,例如:www.baidu.com

  10. PHP CI框架数据库常用操作

    例子 <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Menu extends CI_Co ...