考虑一下代码:
public class MyClass {
@Autowired
private SomeInterface variable;
public void init(ServletContext servletContext) {
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext); //debug point here
context.context.getAutowireCapableBeanFactory().initializeBean(this, getClass().getSimpleName());
}
}
当我保持调试时,自动装配执行正常,但是当我把调试点放开时,我在variable
获得了NPE。看起来
Spring异步执行自动装配。有没有办法确保在所有字段初始化之后?
注意
是的,打电话给initializeBean(this, getClass().getSimpleName())
这不是弹簧使用的最佳做法,但我没有别的
因为类在其他库中实例化而没有使用Spring。
答案 0 :(得分:0)
正如评论中所提到的,最好使用SpringBeanAutowiringSupport
代替AutowireCapableBeanFactory
。
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
@Configurable
public class MyClass {
@Autowired
private SomeInterface variable;
public void init(ServletContext servletContext) {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
}
不要忘记@Configurable
和<context:spring-configured/>
。完整的示例是here