文章目录

  • 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配置文件值注入方式相关推荐

  1. SpringBoot配置文件yaml书写方式

    SpringBoot配置文件yaml书写方式 学习目标 SpringBoot配置文件yaml书写方式 1.properties 2.yaml 2.1.简介 2.2.基本语法 2.3.数据类型 代码示例 ...

  2. idea yml变成文件了_初识SpringBoot之配置文件(二)——配置文件值注入

    1.注入配置文件值-@ConfigurationProperties yml配置文件: person:lastName: lurenyinage: 20student: truebirth: 1999 ...

  3. 正确理解springboot的常用注入方式

    springboot的属性注入 以注入dataSource为例 1.springboot默认读取的文件是放在resources目录下的名为application.properties或applicat ...

  4. Spring boot配置文件值注入

    @ConfigurationProperties 将配置文件中配置的每一个属性的值,映射到这个组件中 告诉SpringBoot将本类中的所有属性 和配置文件中相关的配置进行绑定 Prefix 表示前缀 ...

  5. 配置文件值注入 ||导入配置文件处理器,以后编写配置就有提示

    application.yml server:port: 8081person:lastName: helloage: 18boss: falsebirth: 2017/12/12maps: {k1: ...

  6. SpringBoot —— Bean的注入方式

    文章目录 1.组件注解 2.@Component + @Bean 3.@Import(PlaceHolderClass)快速导入一个组件 4.使用Spring提供的FactoryBean注入 1.组件 ...

  7. SpringBoot配置文件YAML配置注入(详解)

    目录 一.SpringBoot配置文件 1. SpringBoot默认配置文件 2. 配置文件的作用 3. 配置文件的位置 4. 多环境切换 方式一:多配置文件 方式二:一个配置文件(yaml的多文档 ...

  8. Spring Boot概述与入门特点配置方式注入方式yim配置文件与多文件配置Spring Boot自动配置原理lombok应用

    1. Spring Boot概述 Spring Boot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 首页Spring Boot简介可以 ...

  9. 你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及源码解析

    你只知道@Value?设置server.port就能定义端口号是如何实现的?springboot读取配置文件的多种方式以及原理解析 一.SpringBoot全局配置文件优先级 二.属性注入常用注解 1 ...

最新文章

  1. 给一张表加一个自动编号字段_可视化仪表板快速入门教程,10分钟做一张销售分析仪表板...
  2. localStorage、sessionStorage、Cookie的区别及用法
  3. Json的list、map、对象对应格式
  4. 点云数据格式 数据集笔记
  5. 今天感觉有点冷了其实。
  6. selenium打开chrome浏览器代码
  7. 组件化开发 ——— 制作私有库
  8. 计算机控制的点火系统由,第八节(点火系统)
  9. 批量复制文件名-修改文件路径小工具
  10. 怎样用c语言输出一个函数图像,请教 怎么才能用C输出一个函数的图像?大侠 帮帮忙啊...
  11. python语言要多久_怎么自学python,大概要多久?
  12. #pragma push_macro(new) 及扩展操作
  13. 数据结构实验1.2:高精度计算PI值
  14. 读书笔记——《灰度决策:如何处理复杂、棘手、高风险的难题》
  15. maven 详情查考 maven实战 许晓斌
  16. pyspark读取ES数据报array错误
  17. iptables之forward转发
  18. 读遍装修书,我们帮你选出了最有用的10本
  19. Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data-----阅读阶段
  20. Vue调用本地摄像头权限

热门文章

  1. 70个Python练手项目列表 预祝大家 快乐
  2. ctf 文件头crc错误_[CTF隐写]png中CRC检验错误的分析
  3. python3基础知识点总结_python基础知识点总结
  4. 富国银行是如何为公有云转型做准备的
  5. Go程序崩溃现场应该如何保留?
  6. 简单介绍一下umask 命令使用方法
  7. Windows如此普及,为什么要学Linux
  8. python中使用html前端页面显示图像预测结果(Pycharm)
  9. 关于TypeError: ‘numpy.ndarray‘ object is not callable报错
  10. poj1905(二分查找)