java - 在静态方法中使用注入(inject)的 bean 的正确方法是什么?

标签 java spring dependency-injection static-methods

这个问题可能看起来有点奇怪。假设我有一个服务,我想在具有一些静态方法的实用程序类中使用它。该服务是一个 Spring bean,因此我自然会使用 setter 和 (@Autowired) 将其注入(inject)到我的实用程序类中。 正如 Spring 的文档中所提到的,所有 bean 在 bean 上下文中都是静态的。所以当你想在类中注入(inject)一个 bean 时,你不必使用“static”修饰符。见下文:


public class JustAClass{
  private Service service;

  public void aMethod(){
     service.doSomething(....);
  }

  @Autowired
  public void setService(Service service){
     this.service = service;
  }

}

现在回到我首先提到的(在静态方法中使用服务):


public class JustAClass{
  private static Service service;

  public static void aMethod(){
     service.doSomething(....);
  }

  @Autowired
  public void setService(Service service){
     this.service = service;
  }

}

虽然服务是静态的,但我不得不把静态放在它的定义后面。这对我来说有点违反直觉。这是错的吗?还是更好的方法? 谢谢

最佳答案

你不能 Autowiring 静态字段。

但是你可以做一些变通:

@Component
public class JustAClass{
  private static Service service;

  @Autowired
  private Service tmpService;

  @PostConstruct
  public void init() {
    service = tmpService;
  }

}

请注意,您必须将此类声明为“组件”才能注入(inject) tmpService

关于java - 在静态方法中使用注入(inject)的 bean 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19619118/

相关文章:

java - 为什么 main 方法不会捕获 catch block 中未捕获的异常

java - Spring Boot Controller 重定向不起作用

java - 使用 Spring mockMvc 测试可选路径变量

winforms - 使用 Ninject 和 Entity Framework 在 WinForms 中进行依赖注入(inject)

java - Liferay 门户中的文档处理

java - 在本地安装maven插件

java - 是否有静态类型和可变长度的 Java 数组/列表

java - Controller 中url格式错误如何处理?

php - php中这两种构造函数注入(inject)有什么区别?

android - 使用范围 Dagger 2 避免 Activity 泄漏