SpringBoot中工具类注入Bean

1.问题

由于Util工具类中需要读取配置信息,需要注入Bean,但是如果将方法设置为静态方法,就无法读取到注入Bean。在springframework里,我们不能@Autowire一个静态变量,使之成为一个spring bean,例如:

@Autowired
private static LogConfig logConfig;

这样做,启动时还正常,但是调用方法是就会出现空指针异常。因为静态变量、类变量不是对象的属性,而是一个类的属性,所以静态方法是属于类(class)的,普通方法才是属于实体对象(也就是New出来的对象)的,spring注入是在容器中实例化对象,所以不能使用静态方法。

2.解决方案

首先要了解一下Java变量的初始化顺序为:静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired
(1)使用@PostConstruct注解

@Component
public class Demo {
    @Autowired
    private TestConfig testConfig;

    private static TestConfig config;

    @PostConstruct
    public void init() {
        config = testConfig;
    }

    public static void demo() {
        config.test();
    }
}

(2)加个构造函数

@Component
public class Demo {

    private static TestConfig testConfig;

    public Demo(TestConfig testConfig) {
        this.testConfig = testConfig;
    }

    public static void demo() {
        testConfig.test();
    }
}

之前看有人再解释这个静态注入的时候,在这个地方,要在构造方法上加个@Autowired注解,但是我试了一下,不加注解也可以

你可能感兴趣的:(SpringBoot,静态注入)