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

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. 【leetcode】Trips and Users

    The Trips table holds all taxi trips. Each trip has a unique Id, while Client_Id and Driver_Id are b ...

  2. mysql报错:Cause: java.sql.SQLException: sql injection violation, syntax error: ERROR. pos 39, line 2, column 24, token CLOSE

    因为close是mysql关键字 -- ::, DEBUG (BaseJdbcLogger.java:)- ==> Preparing: , -- ::, INFO (XmlBeanDefini ...

  3. CF1073D Berland Fair 二分+线段树

    考场上切的,挺简单的~ Code: #include <cstdio> #include <algorithm> #define N 200005 #define inf 10 ...

  4. pika 与 rabbitMQ 阻塞连接

    之前只是用celery, 这次用一下pika 参考rabbitMQ官网的python版,https://www.rabbitmq.com/tutorials/tutorial-one-python.h ...

  5. cogs1682. [HAOI2014]贴海报 x

    1682. [HAOI2014]贴海报 ★★☆   输入文件:ha14d.in   输出文件:ha14d.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] Bytetow ...

  6. BOM—Browser Object Model and DOM—Document Object Model

    浏览器对象模型的内涵是每个页面都是一个window对象,而dom是document为基准的模型,而document与wimdow.document指向相同,所以可以这么理解,bom模型的定义是包括do ...

  7. 编程之美-1.1 CPU 曲线

    解法二: import time def cpu_curve(): busyTime = 50 # 50 ms的效果比10ms的效果要好 idleTime = busyTime startTime = ...

  8. TensorFlow自动求梯度

    例1 import tensorflow as tf a=tf.Variable(tf.constant(1.0),name='a') b=tf.Variable(tf.constant(1.0),n ...

  9. input(移动端iOS)输入内容时调用软件盘后页面底部留白问题

    iOS/input输入框调用软键盘底部留白 只需input输入框失去焦点时,让页面自动下移即可恢复 <input placeholder="请输入用户名" v-model=& ...

  10. (转)php中字符过滤

    有时候为了安全起见,我们需要对用户输入的字符串进行转义       文章中有不正确的或者说辞不清的地方,麻烦大家指出了--- 与PHP字符串转义相关的配置和函数如下: 1.magic_quotes_r ...