为什么通过autowireCapableBeanFactory无延迟地自动装配字段?

时间:2016-06-06 14:28:56

标签: java spring autowired servlet-3.0 applicationcontext

考虑一下代码:

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。

1 个答案:

答案 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