一、前言
在使用springBoot进行开发时,经常会碰到把配置文件的属性值注入到某个JAVA类的属性中,可以使用@value注解注入配置文件的单个属性,也可以使用@ConfigurationProperties注入对象的多个属性。
二、@value用法
@Value("#{}")
@Value(“#{}”) 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量
"#{100}") (privateintnumber; //获取常量数字100 "#{'helloworld'}") //获取字符串常量 (privateStringstr; "#{dataSource.url}") //获取bean(dataSource)的属性 (privateStringjdbcUrl;
@Value("${}")
用 @Value(“${xxxx}”)注解从配置文件获取对应的值
"${user.name}") (privateStringname;
三、@ConfigurationProperties
Spring源码中大量使用了ConfigurationProperties注解,比如server.port就是由该注解获取到的,通过与其他注解配合使用,能够实现Bean的按需配置。
该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上
使用@Component加载到容器中
我们读取配置文件的信息,并自动封装成实体类,这样我们就可以少写很多配置,这时候,就可以使用@ConfigurationProperties,并与@Component进行组合配置,把配置文件的配置信息自动封装成实体类。
user.username=admin user.password=kyjufskifas2jsfs user.addr=北京市海淀区
prefix="user") (publicclassUser { privateStringusername; privateStringaddr; privateStringpassword ; }
使用@Bean加载到容器中
可以从注解说明中看到,当将该注解作用于方法上时,如果想要有效的绑定配置,那么该方法需要有@Bean注解且所属Class需要有@Configuration注解。
prefix="conn") (publicUsergetUser(){ returnnewUser(); }
四、@EnableConfigurationProperties用法
@EnableConfigurationProperties注解的作用是:使 @ConfigurationProperties 注解的类生效。
如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。@EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。
prefix="conn") (publicclassUser { privateStringusername; privateStringaddr; privateStringpassword ; } User.class) (publicclassUserfiguration { }
五、总结
- @ConfigurationProperties 和 @value 有着相同的功能,但是 @ConfigurationProperties的写法更为方便,可以一次绑定多个属性。
- @ConfigurationProperties 的 POJO类的命名比较严格,因为它必须和prefix的后缀名要一致, 不然值会绑定不上, 特殊的后缀名是“driver-class-name”这种带横杠的情况,在POJO里面的命名规则是 下划线转驼峰 就可以绑定成功,所以就是 “driverClassName”