关于Spring中@Value注解使用
因博主最近遇到一个问题,在查询时,不能确定一个查询的条件是否不变化,所以采用可配置的方式完成,记录一下可配置value的使用方法
1 @Value注解
1 注解说明
@Value
注解时Spring框架中的一个常用功能,其作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。
使用方式有:
-
@Value(“常量”) 常量,包括字符串,网址,文件路径等
-
@Value(“${
property : default_value
}”) 读取配置文件 -
@Value(“#{
obj.property? : default_value
}”) 读取注入bean的属性
说明:
读取配置文件方式中, 可添加默认值,即前面变量不存在或读取失败时,时候默认值.
读取注入bean属性,也可添加默认值,效果同上述一样.
1 集合类配置方式
1 List集合类型
@Value("#{'${list}'.split(',')}")
private List<String> list;
list: jack,tom,rose
2 Map集合类型
@Value("#{${maps}}")
private Map<String,String> maps;
maps: "{name: 'jack', email: 'jack@qq.com'}"
2 注解使用方式
1 常量注入
常常注入有,字符串,资源,网址等, 该适用方式非常少见,因为配置不灵活.功能变更需要修改代码, 远远不如读取配置文件灵活.
举例:
// 注入普通字符串
@Value("Jack")
private String username;
// 注入文件资源
@Value("classpath:com/test/config.xml")
private Resource resource;
// 注入URL资源
@Value("http://www.baidu.com")
private Resource url;
2 读取配置文件
@Value("${}")读取配置文件中的值,注入到变量中去。配置文件分为默认配置文件application.properties和自定义配置文件
举例:
application.yml
配置文件
myUserName: 张三
Java代码
@Value("${myUserName}")
private String myUserName;
3 读取bean的属性
Value(“#{}”), 读取bean对象的属性.
举例:
注册到Spring容器中的bean对象
@Data
@Component
public class User {
private String id;
private String username;
}
Java代码
@Value("#{user.username}")
private String username;
2 @Value使用案列
1 准备环境
准备一个SpringBoot项目环境.
1创建一个bean对象
@Data
@Component
public class User {
private String id;
// 读取配置文件数据
@Value("${myUserName}")
private String username ;
}
2 创建一个控制类
@RestController
@RequestMapping("/consumer")
@Slf4j
public class ConsumerController {
// 读取bean属性
@Value("#{user.username}")
private String username;
// 读取常量
@Value("123456")
private String password;
@RequestMapping("/query")
public String queryById() {
log.info("读取的参数为: username={},password={}", username, password);
return "<h1>" + username + password + "<h1>";
}
}
3 创建application.yml配置文件
myUserName: libai
server:
port: 8081
4 测试效果
浏览器访问地址:
http://localhost:8081/consumer/query
3 总结
关于Spring中@Value注解的使用很多,使用的场景也很广, 一些不能写定的数据,可能需要变化的数据,都可以通过读取配置文件的方式完成功能.常用的场景包括但不限于:一些定时任务的cron表达式, 用户注册的初始密码,文件服务器的地址等.
使用@Value注解读取配置的方式, 在实际使用中,比较有优势,也比较多.一是集中管理变量到配置文件中,方便后期的维护和扩展. 二是对于代码的扩展性和通用性有极大的提高.