Spring 注入值到静态变量中

Spring 是不允许对静态变量进行直接注入的。

例如下面的代码:


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class GlobalValue {

	@Value("${mongodb.db}")
    public static String DATABASE;


}

上面的代码直接运行的结果为:

GlobalValue.DATABASE = null

解决方案

虽然我们不能直接对静态变量进行直接注入,但是我们可以创建一个非静态的 Setter 方法。

通过上面的非静态方法来对静态变量进行注入。

代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class GlobalValue {

    public static String DATABASE;

    @Value("${mongodb.db}")
    public void setDatabase(String db) {
        DATABASE = db;
    }

}

上面的程序将会输出为:

GlobalValue.DATABASE = "mongodb database name"

通过上面的代码可以完成在 Spring 中对静态变量的注入。

1 Like