5

如何延迟初始化 @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();
    }
} 

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

4

1 回答 1

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;
    }
}

然后使用 getter 访问对象。

于 2013-07-10T21:02:52.863 回答