@Autowired和静态方法
我有@Autowired
必须从静态方法中使用的服务。我知道这是错误的,但是我无法更改当前的设计,因为这需要大量的工作,因此我需要一些简单的技巧。我不能更改randomMethod()
为非静态,并且需要使用此自动装配的bean。有什么线索怎么做?
@Servicepublic class Foo {
public int doStuff() {
return 1;
}
}
public class Boo {
@Autowired
Foo foo;
public static void randomMethod() {
foo.doStuff();
}
}
回答:
使用构造函数@Autowired
这种方法将构造需要一些bean作为构造函数参数的bean。在构造函数代码中,您可以将静态字段的值设置为构造函数执行的参数。
@Componentpublic class Boo {
private static Foo foo;
@Autowired
public Boo(Foo foo) {
Boo.foo = foo;
}
public static void randomMethod() {
foo.doStuff();
}
}
使用@PostConstruct将值移交给静态字段
这里的想法是在通过spring配置bean之后将bean移交给静态字段。
@Componentpublic class Boo {
private static Foo foo;
@Autowired
private Foo tFoo;
@PostConstruct
public void init() {
Boo.foo = tFoo;
}
public static void randomMethod() {
foo.doStuff();
}
}
以上是 @Autowired和静态方法 的全部内容, 来源链接: utcz.com/qa/425531.html