惰性初始化注入的bean依赖关系(春季3)

Ana*_*Ana 5 java spring dependency-injection inject lazy-initialization

如何延迟初始化@Inject的依赖项?

public class ClassA {
  @Inject
  ClassB classB;
}


@Configuration
public class Config {
    @Bean
    public ClassA classA() {
        return new ClassA();
    }

    @Bean
    @Lazy
    public ClassB classB() {
        return new ClassB();
    }
} 
Run Code Online (Sandbox Code Playgroud)

实例化classA bean时,尽管有@Lazy批注,classB bean也被实例化。如何避免classB bean实例化?

Jea*_*ond 1

你真的不能那样做。正如 Sotirios 所说,Spring 需要实例化它才能将其注入到ClassA. 您可能可以使用应用程序上下文手动完成此操作。就像是 :

public class ClassA {

    @Inject
    private ApplicationContext appContext;

    private ClassB classB;

    //Bean will be instanciated when this method is called
    public ClassB getClassB() { 
        if (classB == null) {
            classB = appContext.getBean(ClassB.class);
        }
        return classB;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用getter来访问该对象。