SpringBoot配置文件值注入方式
文章目录
- 1、准备环境
- 2、properties配置文件在idea中默认utf-8可能会乱码
- 3、@Value取值注入
- 4、@Value获取值和@ConfigurationProperties获取值比较
- 5、配置文件注入值数据校验
- 6、@PropertySource&@ImportResource&@Bean
1、准备环境
配置文件
person:lastName: helloage: 18boss: falsebirth: 2020/03/21maps: {k1: v1,k2: 12}lists:- lisi- zhaoliudog:name: 小狗age: 12
对应的javaBean实体类
/*** 将配置文件中配置的每一个属性的值,映射到这个组件中* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;* prefix = "person":配置文件中哪个下面的所有属性进行一一映射** 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;**/
@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;
可以导入配置文件处理器,以后编写配置就有提示了
<!--导入配置文件处理器,配置文件进行绑定就会有提示--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
2、properties配置文件在idea中默认utf-8可能会乱码
3、@Value取值注入
1)@Value与@ConfigurationProperties注解都可以从全局配置文件中获取值然后注入到属性中。
2)可以使用@Value(xxx)注解就可以直接为某个属性注入全局配置文件中的值
@Value("#{}"):表示SpEL表达式
@Value("${xxx}"):表示从配置文件中取值,如果“xxx“key不存在,则启动时报错:Injection of autowired dependencies failed
@Value("${xxx:yyy}"):从配置文件中取值,如果“xxx”不存在,则使用默认值“yyy”
@Value获取全局配置文件application.yml中的值为属性赋值(被赋值的属性可以不提供setter方法,但是所在的类必须被Spring容器管理)
/*** 狗 实体类* @Component 无论是@ConfigurationProperties还是@Value注入值,都必须先使当前类成为* Spring容器中的组件,这样Spring容器才能为它DI注入值*/
@Component
public class Dog {//赋值普通的Java数据类型值@Value("1000")private Integer id;//${key}:从环境变量以及配置文件中获取值,如果 user.lastName 不存在,则设置默认值 root@Value("${user.lastName:root}")private String name;//#{SpEL}:Sping 表达式语言@Value("#{10*3}")private Integer age;
}
4、@Value获取值和@ConfigurationProperties获取值比较
@ConfigurationProperties | @Value | |
---|---|---|
注解功能 | 将配置文件中的属性值批量注入类的各个属性 | 为类中的各个属性一个个赋值 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL(Spring表达式) | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
属性是否需要提供setter方法 | 需要 | 不需要 |
配置文件yml还是properties他们都能获取到值;
如果说,只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用==@Value==;
如果说,项目中专门编写了一个javaBean来和配置文件进行映射,我们就直接使用==@ConfigurationProperties==;
5、配置文件注入值数据校验
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {/*** <bean class="Person">* <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>* <bean/>*///lastName必须是邮箱格式@Email//@Value("${person.last-name}")private String lastName;//@Value("#{11*2}")private Integer age;//@Value("true")private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;
6、@PropertySource&@ImportResource&@Bean
@PropertySource:加载指定的配置文件;
@PropertySource默认是不支持yml文件加载的,需要自己实现
/*** 将配置文件中配置的每一个属性的值,映射到这个组件中* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;* prefix = "person":配置文件中哪个下面的所有属性进行一一映射** 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;* @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;**/
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String lastName;private Integer age;private Boolean boss;
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效
不来编写Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="helloService" class="com.atguigu.springboot.service.HelloService"></bean>
</beans>
SpringBoot推荐给容器中添加组件的方式;推荐使用全注解
的方式
1、配置类**@Configuration**------>Spring配置文件
2、使用**@Bean**给容器中添加组件
/*** @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件** 在配置文件中用<bean><bean/>标签添加组件**/
@Configuration
public class MyBeanConfig {//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名@Beanpublic HelloService helloServiceDemo(){System.out.println("配置类@Bean给容器中添加组件了...");return new HelloService();}
}
SpringBoot配置文件值注入方式相关推荐
- SpringBoot配置文件yaml书写方式
SpringBoot配置文件yaml书写方式 学习目标 SpringBoot配置文件yaml书写方式 1.properties 2.yaml 2.1.简介 2.2.基本语法 2.3.数据类型 代码示例 ...
- idea yml变成文件了_初识SpringBoot之配置文件(二)——配置文件值注入
1.注入配置文件值-@ConfigurationProperties yml配置文件: person:lastName: lurenyinage: 20student: truebirth: 1999 ...
- 正确理解springboot的常用注入方式
springboot的属性注入 以注入dataSource为例 1.springboot默认读取的文件是放在resources目录下的名为application.properties或applicat ...
- Spring boot配置文件值注入
@ConfigurationProperties 将配置文件中配置的每一个属性的值,映射到这个组件中 告诉SpringBoot将本类中的所有属性 和配置文件中相关的配置进行绑定 Prefix 表示前缀 ...
- 配置文件值注入 ||导入配置文件处理器,以后编写配置就有提示
application.yml server:port: 8081person:lastName: helloage: 18boss: falsebirth: 2017/12/12maps: {k1: ...
- SpringBoot —— Bean的注入方式
文章目录 1.组件注解 2.@Component + @Bean 3.@Import(PlaceHolderClass)快速导入一个组件 4.使用Spring提供的FactoryBean注入 1.组件 ...
- SpringBoot配置文件YAML配置注入(详解)
目录 一.SpringBoot配置文件 1. SpringBoot默认配置文件 2. 配置文件的作用 3. 配置文件的位置 4. 多环境切换 方式一:多配置文件 方式二:一个配置文件(yaml的多文档 ...
- Spring Boot概述与入门特点配置方式注入方式yim配置文件与多文件配置Spring Boot自动配置原理lombok应用
1. Spring Boot概述 Spring Boot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 首页Spring Boot简介可以 ...
- 你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及源码解析
你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及原理解析 一.SpringBoot全局配置文件优先级 二.属性注入常用注解 1 ...
最新文章
- 给一张表加一个自动编号字段_可视化仪表板快速入门教程,10分钟做一张销售分析仪表板...
- localStorage、sessionStorage、Cookie的区别及用法
- Json的list、map、对象对应格式
- 点云数据格式 数据集笔记
- 今天感觉有点冷了其实。
- selenium打开chrome浏览器代码
- 组件化开发 ——— 制作私有库
- 计算机控制的点火系统由,第八节(点火系统)
- 批量复制文件名-修改文件路径小工具
- 怎样用c语言输出一个函数图像,请教 怎么才能用C输出一个函数的图像?大侠 帮帮忙啊...
- python语言要多久_怎么自学python,大概要多久?
- #pragma push_macro(new) 及扩展操作
- 数据结构实验1.2:高精度计算PI值
- 读书笔记——《灰度决策:如何处理复杂、棘手、高风险的难题》
- maven 详情查考 maven实战 许晓斌
- pyspark读取ES数据报array错误
- iptables之forward转发
- 读遍装修书,我们帮你选出了最有用的10本
- Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data-----阅读阶段
- Vue调用本地摄像头权限
热门文章
- 70个Python练手项目列表 预祝大家 快乐
- ctf 文件头crc错误_[CTF隐写]png中CRC检验错误的分析
- python3基础知识点总结_python基础知识点总结
- 富国银行是如何为公有云转型做准备的
- Go程序崩溃现场应该如何保留?
- 简单介绍一下umask 命令使用方法
- Windows如此普及,为什么要学Linux
- python中使用html前端页面显示图像预测结果(Pycharm)
- 关于TypeError: ‘numpy.ndarray‘ object is not callable报错
- poj1905(二分查找)