@ConfigurationProperties与@Value的区别
@ConfigurationProperties与@Value的区别
1.松散语法
@ConfigurationProperties方式
用来测试的person类
@PropertySource加载指定的配置文件
@Component将person类注入到spring容器中
@Data lombok工具中的一个注解,用来生成一些相应的getter,setting,toString方法
@ConfigurationProperties进行properties文件绑定
测试类
@[email protected]@Test测试使用注解
@Autowired注入Bean
properties文件中的参数
通过lastName来测试
测试通过,说明@ConfigurationProperties支持松散语法
@Value方式
以下放一些关键性的图,重复的图就不再放了
都为last-name成功输出
此时我们将@Value中修改为lastName之后运行测试类
错文信息提示无法解析这个参数
故@Value的方式不支持松散语法
spel方面
@Value方式
控制台输出结果为8,证明@Value这种方式是支持spring表达式语言的
@ConfigurationProperties方式
此时控制台输出数字格式异常
证明:@ConfigurationProperties这种方式并不支持spring的表达式语言
JSR303数据校验
@ConfigurationProperties方式
首先将配置文件中的last-name删除
@Vllidated开启校验功能
给lastNmae贴上@Null校验判断,若为空则应该正常运行
结果正确
再将last-name在properoties文件中赋值
结果很明显,未通过
由此说明,@ConfigurationProperties这种方式支持JSR303数据校验
接下来测试@Value的方式
我们先来取消注入测试一下
结果是通过了,故猜想,@Value方式也支持JSR303数据校验,但是我们还需要测试一下当数据注入后的运行结果
注入参数
测试
结果居然添加进去了,所以之前的猜想是错误的,结果说明@Value的方式并不支持JSR303数据校验
复杂类型的封装
@Value方式
我们这次测试两个类型,map和一个新的bean
用此方式获取配置文件中的map
以下是控制台打印结果
并没有获取到map的值,也没有获取到dog类中的信息
故此说明@Value的方式并不支持复杂类型数据的封装
@ConfigurationProperties方式
此时可以顺利的获取到map中的值,并且也成功的获取到的dog类中封装的信息,故
@ConfigurationProperties方式支持复杂数据类型的封装
、
总结
若有什么错误还请指点,谢谢