@ConfigurationProperties与@Value的区别

@ConfigurationProperties与@Value的区别

1.松散语法

@ConfigurationProperties方式

用来测试的person类
@PropertySource加载指定的配置文件
@Component将person类注入到spring容器中
@Data lombok工具中的一个注解,用来生成一些相应的getter,setting,toString方法
@ConfigurationProperties进行属性绑定
在这里插入图片描述
测试类
@SpringBootTest@RunWith@Test测试使用注解
@Autowired注入Bean
在这里插入图片描述
properties文件中的参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过lastName来测试
在这里插入图片描述
测试通过,说明@ConfigurationProperties支持松散语法

@Value方式

以下放一些关键性的图,重复的图就不再放了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
都为last-name成功输出
此时我们将@Value中修改为lastName之后运行测试类
在这里插入图片描述
错文信息提示无法解析这个参数
在这里插入图片描述
故@Value的方式不支持松散语法

2.spel方面

@Value方式

在这里插入图片描述
在这里插入图片描述
控制台输出结果为8,证明@Value这种方式是支持spring表达式语言的

@ConfigurationProperties方式

在这里插入图片描述
此时控制台输出数字格式异常在这里插入图片描述
证明:@ConfigurationProperties这种方式并不支持spring的表达式语言

3.JSR303数据校验

@ConfigurationProperties方式

首先将配置文件中的last-name删除
在这里插入图片描述
@Vllidated开启校验功能
给lastNmae贴上@Null校验判断,若为空则应该正常运行
在这里插入图片描述
结果正确
在这里插入图片描述
再将last-name在properoties文件中赋值
在这里插入图片描述

结果很明显,未通过在这里插入图片描述
由此说明,@ConfigurationProperties这种方式支持JSR303数据校验

接下来测试@Value的方式

我们先来取消注入测试一下
在这里插入图片描述
在这里插入图片描述
结果是通过了,故猜想,@Value方式也支持JSR303数据校验,但是我们还需要测试一下当数据注入后的运行结果
注入参数
在这里插入图片描述
测试
在这里插入图片描述
结果居然添加进去了,所以之前的猜想是错误的,结果说明@Value的方式并不支持JSR303数据校验

4.复杂类型的封装

@Value方式

我们这次测试两个类型,map和一个新的bean
在这里插入图片描述
用此方式获取配置文件中的map
在这里插入图片描述
在这里插入图片描述
以下是控制台打印结果
在这里插入图片描述
并没有获取到map的值,也没有获取到dog类中的信息
故此说明@Value的方式并不支持复杂类型数据的封装

@ConfigurationProperties方式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时可以顺利的获取到map中的值,并且也成功的获取到的dog类中封装的信息,故
@ConfigurationProperties方式支持复杂数据类型的封装

总结

在这里插入图片描述

若有什么错误还请指点,谢谢

猜你喜欢

转载自blog.csdn.net/qq_43513205/article/details/86564166