静态变量的自动注入值

做项目的时候有可能会经常发生这样的事情,就是要在静态方法里面调用其他类的方法,如果直接new一个出来的话,有可能会造成该类和该类里面的其他依赖类无法正常的注入,如果直接@Autowired在这个静态变量上的话会造成该变量还是null。

为什么呢?

因为静态变量不是一个对象,只是类的引用,而类被加载字节码的时候,变量已经初始化了,也就是给该变量分配内存了,导致spring忽略静态变量。

如何解决呢?

可以使用setter方法来注入,如下:

1
2
3
4
5
6
private static UserService userService;

@Autowired
public void setUserService(UserService service) {
userService = service;
}

这样就可以正常的进行依赖注入了。