AI 摘要
Java工具类中@Value注解注入为空,因静态变量无法被Spring依赖注入。Spring注入基于对象实例,而static变量在对象创建前已分配内存。解决方案:在@Component标注的工具类中定义非静态set方法,通过该方法将注入值赋给静态变量,如通过setOamUrl(String url)将@Value注入的配置值赋给静态字段url。
原因分析
在后端开发当中我们可能会使用到工具类,而一般的工具类中的方法都是静态方法。而@Value注解只能给普通变量注入值,不能直接给静态变量赋值。
知识拓展
静态变量(即类变量)是一个类的属性,而不是对象的属性。spring依赖注入是基于对象层面上的。
static变量在对象创建前就分配过内存了,而spring的注入是在创建对象的时候注入的。
解决方案
可以提前定义一个set方法,这个方法是非静态的。
@Slf4j
@Component
public class xxxUtil {
/**
* Url
*/
private static String url;
/**
* 注入 配置文件值
*
* @param oamUrl 配置文件值
*/
@Value("${server.url}")
public void setOamUrl(String url) {
xxxUtil.url = url;
}
}
评论 (0)