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

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. web前端:上传文件夹(需支持多浏览器)

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  2. 彩色图像--色彩空间 CIELAB、CIELUV

    学习DIP第65天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://gi ...

  3. Jmeter(五)关联之正则表达式提取器

    我们在用Jmeter做接口或者性能测试时,经常会碰到第二个请求提交的的参数要从第一个请求返回的参数中获取,而这些参数值并不是固定的,是动态变化的,这种场景就要用到关联 Jmeter提供了一种叫做正则提 ...

  4. Python3学习笔记(十五):常用时间模块time和datetime

    一.time模块 1.时间戳 time.time() :从1970-01-01到至今的秒数 import time print(time.time()) 1529238004.2784646 2.等待 ...

  5. Link-Cut Tree(LCT) 教程

    目录 前置知识 介绍 Access FindRoot MakeRoot Split Link Cut 关于Splay中操作的一点说明: 模板 前置知识 请先对树链剖分和Splay有所了解.LCT基于树 ...

  6. ACM技能表

    看看就好了(滑稽) 数据结构 栈 栈 单调栈 队列 一般队列 优先队列/单调队列 循环队列 双端队列 链表 一般链表 循环链表 双向链表 块状链表 十字链表 邻接表/邻接矩阵 邻接表 邻接多重表 Ha ...

  7. 实现一个成熟的底层毛玻璃效果(纯CSS)

    写在前面 毛玻璃背景是一个很常见的网页样式,想要实现,其实并不难,但经过我在网上的搜索发现,大量实现方法都较为不规范,且把问题复杂化了(例如各种z-index属性和position的定位)现提供一个代 ...

  8. DS博客大作业--树 (陈梓灿组)

    1.树的存储结构说明 定义的结构体中,name是用于存放文件名称,string类型是字符串类型,定义了child孩子结点和brother兄弟结点. 2.树的函数说明 1.main函数 main函数中主 ...

  9. LeetCode 516——最长回文子序列

    1. 题目 2. 解答 与最长回文子串类似,我们可以用动态规划来求解这个问题,只不过这里的子序列可以不连续.我们定义状态 state[i][j] 表示子串 s[i, j] 的最长回文子序列长度,那么状 ...

  10. Docker 资源汇总

    Docker 资源汇总 Docker官方英文资源 Docker官网:http://www.docker.com Docker Windows 入门:https://docs.docker.com/do ...