工具类使用@Value将信息注入到静态变量中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工具类使用@Value将信息注入到静态变量中相关的知识,希望对你有一定的参考价值。

参考技术A

在spring工程中,我们经常需要使用到配置文件的一些信息,在每个类中定义,可能导致这些信息变得零散。spring给我们提供了一个注解 @Value() ,使我们可以注入配置文件中的数据。

如果你想在你的工具类中注入这个变量,那么你可能面临问题,方法是 static 的,那么你需要使用静态变量作为参数在方法中使用。

先说结论: Spring从源码层面不提供对 static 修饰符的成员变量进行注入.

在静态工具类中注入Service的解决方案

由于工具类中方法一般都是静态的,所以要求该属性也要是静态的(Service)。
但是由于Spring/SpringBoot正常情况下不能支持注入静态属性(会报空指针异常)。
主要原因在于:Spring的依赖注入实际上是依赖于Set方法进行注入值的,Spring是基于对象层面的依赖注入,而静态属性/静态变量实际上是属于类的。
解决方案一:
给当前的工具类加上@Component,使其成为一个bean对象
声明一个静态的属性(加上注解@Autowired),一个非静态的属性。
声明一个返回值为void并且不能抛出异常的方法,在其中将非静态属性赋值给静态属性。该方法上加上注解@PostConstruct
这样就将service的值注入了进来。示例代码如下:

@Component
public class BaseUtil {

    @Autowired
    private ISystemOrganService systemOrganServiceTemp;
    @Autowired
    private ISystemUserService systemUserServiceTemp;
    private static ISystemOrganService systemOrganService;
    private static ISystemUserService systemUserService;
    @PostConstruct
    public void init(){
        systemOrganService = systemOrganServiceTemp;
        systemUserService = systemUserServiceTemp;
    }







以上是关于工具类使用@Value将信息注入到静态变量中的主要内容,如果未能解决你的问题,请参考以下文章

Java spring非注入类访问注入类方法

Java spring非注入类访问注入类方法

静态工具类中使用注解注入service

[坑]Spring利用注解@Value获取properties属性为null

Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题

spring注入静态成员变量