Spring框架中如何使用@Autowired注解自动装配静态变量?
- 内容介绍
- 文章标签
- 相关推荐
本文共计975个文字,预计阅读时间需要4分钟。
最近项目需求,需要使用一个工具类来访问数据库。但是,这个工具类已被定义为静态访问。因此,我们需要设置一个静态变量来访问数据库。使用`@Autowired`注入,以下是相应的代码示例:
java@Autowiredprivate static VisaRepository visa;
最近应该项目的需要,需要使用一个工具类来访问数据库。
但是这个工具类又被定义成静态访问了。
我们也需要设置一个静态变量来访问数据库。
@Autowiredprivate static VisaRepository visaRepository;
private static
上面的代码在编译的时候是没有问题的。
但是在程序运行的时候提示空对象异常。
类加载后静态成员是在内存的共享区,静态方法里面的变量必然要使用静态成员变量。
通过日志我们可以非常明确的知道上面异常的主要原因就是因为 VisaRepository 这个变量没有初始化,简单来说就是没有被@Autowired
问题和解决
在 Spring 框架中,不能@Autowired一个静态变量,使之成为一个Spring bean。
这是因为当类加载器加载静态变量时,Spring上下文尚未加载。所以类加载器不会在bean中正确注入静态类。
这个和静态变量这个属性有关的,因为静态变量总是先于 Spring 的 上下文加载。
本文共计975个文字,预计阅读时间需要4分钟。
最近项目需求,需要使用一个工具类来访问数据库。但是,这个工具类已被定义为静态访问。因此,我们需要设置一个静态变量来访问数据库。使用`@Autowired`注入,以下是相应的代码示例:
java@Autowiredprivate static VisaRepository visa;
最近应该项目的需要,需要使用一个工具类来访问数据库。
但是这个工具类又被定义成静态访问了。
我们也需要设置一个静态变量来访问数据库。
@Autowiredprivate static VisaRepository visaRepository;
private static
上面的代码在编译的时候是没有问题的。
但是在程序运行的时候提示空对象异常。
类加载后静态成员是在内存的共享区,静态方法里面的变量必然要使用静态成员变量。
通过日志我们可以非常明确的知道上面异常的主要原因就是因为 VisaRepository 这个变量没有初始化,简单来说就是没有被@Autowired
问题和解决
在 Spring 框架中,不能@Autowired一个静态变量,使之成为一个Spring bean。
这是因为当类加载器加载静态变量时,Spring上下文尚未加载。所以类加载器不会在bean中正确注入静态类。
这个和静态变量这个属性有关的,因为静态变量总是先于 Spring 的 上下文加载。

