这个问题可能看起来有点奇怪。假设我有一个服务,我想在具有一些静态方法的实用程序类中使用它。该服务是一个 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/