面对的问题:有些时候需要在static方法中使用spring管理的bean的方法,一种方式是直接使用ApplicationContext直接获取bean,这里介绍另一种方式。
Spring静态注入本身就已经并非最佳实践了。关于Spring静态注入存在很多争议。但是编程是神奇的,总有各种奇奇怪怪的场景让人不得不去采用这种方式。那么非得用到spring静态注入的时候,怎样做最好呢。个人觉得最好的方式是这样的:出处
先让需要被静态注入的类实现 InitializingBean
接口或者使用注解 @PostConstruct
,然后在类中包含一个保存自己引用的静态变量。
例子:
@Service
public class MyBean implements InitializingBean {
private static MyBean instance;
@Override
public void afterPropertiesSet() throws Exception {
instance = this;
}
public static MyBean get() {
return instance;
}
}
然后在需要使用该类的static方法中就可以通过以下的方式获取需要的实例了:
MyBean myBean = MyBean.get();
使用这种方式,没有XML配置,不需要通过构造方法传递这个bean,也不用去关心这个bean是不是使用了Spirng,最重要的是不必去理会麻烦的ApplicationContext