聊聊@value注解和@ConfigurationProperties注解的使用
目录
- @value注解和@ConfigurationProperties注解
- @value读取默认配置
- @ConfigurationProperties读取默认配置
- @ConfigurationProperties和@Value使用上的一点区别
- 第一段代码
- 第二段代码
@value注解和@ConfigurationProperties注解
@value读取默认配置
yml文件内容如下(装了STS插件以后即可直接使用,改后缀就行了)
user:username: xiongdasex: manage: 20school:name: xtulocation: hunan
备注:一定要注意之间要留空格,发现颜色变绿色了才是正确的格式,这个坑我刚踩
package com.example.demo.service.impl; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.example.demo.service.ReadConfigService; @Servicepublic class ReadConfigServiceImpl implements ReadConfigService {@Value(value="https://www.it610.com/article/${user.username}")private String username; @Value(value="https://www.it610.com/article/${user.sex}")private String sex; @Value(value="https://www.it610.com/article/${user.age}")private String age; @Value(value="https://www.it610.com/article/${school.name}")private String name; @Value(value="https://www.it610.com/article/${school.location}")private String location; @Overridepublic String getUserMessage() {return "user ="+username+" sex ="+sex+" age="+age; } @Overridepublic String getAuthorMessage() {return "schoolname="+name+"location="+location; }}
@ConfigurationProperties读取默认配置
package com.example.demo.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component@ConfigurationProperties(prefix="user")public class HelloConfig {private String username; private String sex; private String age; public String getUsername() {return username; } public void setUsername(String username) {this.username = username; } public String getSex() {return sex; } public void setSex(String sex) {this.sex = sex; } public String getAge() {return age; } public void setAge(String age) {this.age = age; }}
【聊聊@value注解和@ConfigurationProperties注解的使用】调用的controller层
package com.example.demo.web; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.example.demo.config.HelloConfig; import com.example.demo.service.ReadConfigService; @RestController@RequestMapping("hello")public class HelloController {@AutowiredReadConfigService readConfigService; @AutowiredHelloConfig helloConfig; @RequestMapping("/user")public String say() {return "username "+helloConfig.getUsername()+" sex "+helloConfig.getSex()+" age "+helloConfig.getAge(); }@RequestMapping("/school")public String school() {return readConfigService.getAuthorMessage(); }}
@ConfigurationProperties和@Value使用上的一点区别 @ConfigurationProperties和@Value的一个共同点就是从配置文件中读取配置项。
发现有一点区别,我项目配置中并没有配置hello.msg ,当使用第一段代码时,启动后读取到msg为null,而第二段代码则会抛出异常。
第二段代码有个好处,就是防止我们配置项遗漏,当遗漏时,启动程序肯定出错,这样避免了一些因为遗漏配置项导致的BUG.
第一段代码
import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties("hello")public class HelloProperties {private String msg; public String getMsg() {return msg; }public void setMsg(String msg) {this.msg = msg; }}
第二段代码
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Componentpublic class Hello2Properties {@Value("${hello.msg}")private String msg; public String getMsg() {return msg; }public void setMsg(String msg) {this.msg = msg; }}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- SpringBoot调用公共模块的自定义注解失效的解决
- 想聊聊SA,聊聊手帐,也想和你们分享自己
- 生活与游戏日记(第182篇)(〔成长瞬间〕关注解决问题2019.10)
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- Spring注解驱动第十讲--@Autowired使用
- =======j2ee|spring用注解实现注入的@resource,@autowired,@inject区别
- Java代码辅助效率工具Lombok(注解|Java代码辅助效率工具Lombok(注解,自动生成代码)
- 世外小学惨案后,和孩子聊聊世界的“复杂”
- Spring注解05|Spring注解05 @Import 给容器快速导入一个组件
- 聊聊curator|聊聊curator recipes的LeaderLatch