Spring Boot学习笔记(五)

使用@ConfigurationProperties注入属性

使用Spring Boot全局配置文件配置属性时,如果配置的属性是Spring Boot默认提供的属性(如:服务器端口),那么Spring Boot内部会自动扫描并读取属性值。如果配置的属性是用户自定义属性(如:实体类属性),则必须在程序中注入这些配置的属性方可生效。

1.使用@ConfigurationProperties注入属性
相关注解

  • @Component
  • @ConfigurationProperties(prefix=“xxx”)
    用person实体类进行演示说明,代码如下:
@Component  //生成当前类的实例对象存到IOC容器中
@ConfigurationProperties(prefix="person")   //将配置文件中每个前缀为person的属性的值映射到当前类中的变量上

public class person {
    private int id; //id
    private String name;    //姓名
    private List hobby; //爱好
    private String[] family;    //家庭成员
    private Map map;
    private Pet pet;    //宠物
    ...

接下来在测试类中,测试一下能不能注入成功:

class Chapter02ApplicationTests {
    @Autowired
    private Person person;  //在容器中取出实例对象,完成注入


    @Test
    public void contextLoads() {
        System.out.println(person);
    }
}

在控制台可以看到打印成功的信息:
在这里插入图片描述
注意:使用@ConfigurationProperties注解批量注入属性值时,要保证配置文件中的属性与对应实体类的属性一致,否则无法正确获取并注入属性值。
2.使用@value注入属性
相关注解:

  • @Component
  • @Value
    @Value注解的作用是注解普通数据类型,接下来在测试类中进行演示:
class Chapter02ApplicationTests {

    private String name;	//当前值为null
    @Test
    public void contextLoads() {
        System.out.println(name);
    }
}

现在需要把yaml里面的name的值注入进去:

    @Value("${person.name}")
    private String name;

打印测试一下:
在这里插入图片描述
说明:使用@Value注解对每个属性注入设置,免去了属性setXX()方法

两种注解对比分析

两年中注解对比分析

  • @ConfigurationProperties主要是将配置文件中,某一类属性整体批量地读取并注入到某个Bean的属性中,而@Value是单个注入;
  • @ConfigurationProperties本质是通过set()方法进行注入的;
  • @ConfigurationProperties在进行注入时,支持任意类型,包括基本数据类型和复杂数据类型,@Value仅支持普通数据类型的注入;
  • 松散绑定:一种配置文件的语法,示例代码如下:
person.firstName=Tom	//标准写法
person.first_name=Tom	//"_"分隔多个单词
person.first-name=Tom	//"-"分隔多个单词
PERSON.FIRST_NAME=Tom	//使用大小写格式,推荐常量属性配置
  • 数据校验:校验配置文件中注入对应Bean属性的值是否符合相关值的规则,邮箱规则校验示例代码如下:
@Component
@ConfigurationProperties(prefix="person")
@Validated	//引入Spring框架支持的数据校验规则
public class Example{
	@Email	//对属性进行规则匹配
	private void setEmail(String email){
		this.email=email;
	}
}
  • @Value注解注入配置文件属性时,支持SpEL表达式语法,即"#{XX}"。例如Person类有一个整数类型的属性id,直接使用SpEL表达式语法进行属性注入,示例代码如下:
@Value("#{5*2}")	//使用@Value注解的SpEL表达式直接为属性注入属性值
private int id;

上述代码在不使用配置文件的情况下,直接使用@Value注解支持SpEL表达式注入Bean属性。

小结:

  1. 如果只是针对某一个业务需求,要引入配置文件中的个别属性值,推荐使用@Value注解;
  2. 如果针对某个JavaBean类,需要批量注入属性值,则推荐使用@ConfigurationProperties注解
发布了5 篇原创文章 · 获赞 5 · 访问量 72

猜你喜欢

转载自blog.csdn.net/IT_cat_/article/details/105727898