Spring框架中如何使用@Autowired注解自动装配静态变量?

2026-05-29 11:582阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计975个文字,预计阅读时间需要4分钟。

Spring框架中如何使用@Autowired注解自动装配静态变量?

最近项目需求,需要使用一个工具类来访问数据库。但是,这个工具类已被定义为静态访问。因此,我们需要设置一个静态变量来访问数据库。使用`@Autowired`注入,以下是相应的代码示例:

java@Autowiredprivate static VisaRepository visa;

最近应该项目的需要,需要使用一个工具类来访问数据库。

但是这个工具类又被定义成静态访问了。

我们也需要设置一个静态变量来访问数据库。

@Autowired
private static VisaRepository visaRepository;

private static

​​

​​

上面的代码在编译的时候是没有问题的。

但是在程序运行的时候提示空对象异常。

​​

​​

类加载后静态成员是在内存的共享区,静态方法里面的变量必然要使用静态成员变量。

通过日志我们可以非常明确的知道上面异常的主要原因就是因为 VisaRepository 这个变量没有初始化,简单来说就是没有被@Autowired

问题和解决

在 Spring 框架中,不能@Autowired一个静态变量,使之成为一个Spring bean。

这是因为当类加载器加载静态变量时,Spring上下文尚未加载。所以类加载器不会在bean中正确注入静态类。

这个和静态变量这个属性有关的,因为静态变量总是先于 Spring 的 上下文加载。

阅读全文

本文共计975个文字,预计阅读时间需要4分钟。

Spring框架中如何使用@Autowired注解自动装配静态变量?

最近项目需求,需要使用一个工具类来访问数据库。但是,这个工具类已被定义为静态访问。因此,我们需要设置一个静态变量来访问数据库。使用`@Autowired`注入,以下是相应的代码示例:

java@Autowiredprivate static VisaRepository visa;

最近应该项目的需要,需要使用一个工具类来访问数据库。

但是这个工具类又被定义成静态访问了。

我们也需要设置一个静态变量来访问数据库。

@Autowired
private static VisaRepository visaRepository;

private static

​​

​​

上面的代码在编译的时候是没有问题的。

但是在程序运行的时候提示空对象异常。

​​

​​

类加载后静态成员是在内存的共享区,静态方法里面的变量必然要使用静态成员变量。

通过日志我们可以非常明确的知道上面异常的主要原因就是因为 VisaRepository 这个变量没有初始化,简单来说就是没有被@Autowired

问题和解决

在 Spring 框架中,不能@Autowired一个静态变量,使之成为一个Spring bean。

这是因为当类加载器加载静态变量时,Spring上下文尚未加载。所以类加载器不会在bean中正确注入静态类。

这个和静态变量这个属性有关的,因为静态变量总是先于 Spring 的 上下文加载。

阅读全文