Springboot @Value注解在工具类中为null

一.背景
Springboot通过@Value注解会将properties/yml文件中的属性注入到容器内组件中,而在我们的工具类中并不是spring的组件,因此在工具类中直接使用@Value的时候会为null,所以需要做特殊处理。
小知识:@Value是在spring注入该类的默认构造器(即无参构造),再进行注入的

二.解决方案
1.自定义一个组件

@Component
public class Test {
	
	//@Value只能给普通变量注入值,不能给静态变量赋值,不能直接在这里写@Value
	public static String address;
	
	
	@Value("${server.port}")
	public void setAddress(String address) {
		Test.address = address;
	}
}

2.在工具类中直接调用这个类的属性

public class Test2 {
	public String getValue() {
		return Test.address;
	}
}

然后在实例化Test2的时候,调用getValue方法是可以拿到返回值的。
结论:@Comment组件在springboot启动的时候就被扫描到,并且@Value实现注入,相当于将address获取到的值传给Test类中的属性,因此可以在工具类中,直接调用这个类的属性,获取到@Value取到的值。

另一种写法,容器初始化的时候给静态属性赋值,这个同样可以在工具类中直接引用Test.ADDRESS

@Component
public class Test implements InitializingBean{
	
	public static String ADDRESS;
	
	@Value("${server.port}")
	public String address;

	@Override
	public void afterPropertiesSet() throws Exception {
		ADDRESS = address;
		
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值