Lazy init注入bean依赖项(Spring 3)

时间:2013-07-10 20:44:08

标签: 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();
    }
} 

当实例化classA bean时,尽管有@Lazy注释,classB bean也会被实例化。 我怎样才能避免classB bean实例化?

1 个答案:

答案 0 :(得分:0)

你真的不能那样做。就像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访问该对象。