强制spring如何在发现配置类时立即创建所有声明的bean?

时间:2016-08-31 05:37:57

标签: java spring

我有几个配置类的Web应用程序。

@Configuration
public class ConfigA {

    @Bean(name = "bean_1")
    public MyBean getBean1() { /* Some code is here */ }

    @Bean(name = "bean_2")        
    public MyBean getBean2() { /* Some code is here */ }

    /* ... */

    @Bean(name = "bean_99")        
    public MyBean getBean99() { /* Some code is here */ }        
}

@Configuration
public class ConfigB {

    public OtherBean getOtherBean() { /* Some code is here */ }

}

在调用构造函数时,MyBean类的bean会在某些全局上下文中注册。而OtherBean bean使用此全局上下文来获取MyBean类的所有实例。但是spring会在几个MyBean bean之前创建OtherBean,我不知道如何改变这种行为。

PS:

  1. 我不想在OtherBean中直接(明确地)注入所有MyBean bean,有很多MyBean bean。
  2. 现在我有一个解决方案:在类ConfigB上声明注释@DependsOn({“bean_1”,“bean_2”....“bean_99”}),但我觉得它很不方便(几乎是同一点1)
  3. 我认为只要发现此配置类(ConfigA),解决方案就可能是强制spring来创建所有声明的bean(bean_1,...)。

2 个答案:

答案 0 :(得分:1)

添加@Autowired列表清单;字段到您的配置?这会将所有已注册的bean注入一个列表,所以希望以某种方式检查那些bean创建的位置。

答案 1 :(得分:1)

您可以在此处添加@Lazy,这是javadoc

  

如果@Component或@Bean定义中没有此注释,则会发生急切初始化。如果存在并设置为true,则@Bean或@Component将不会被初始化,直到被另一个bean引用或从封闭的BeanFactory中显式检索。如果存在并设置为false,那么bean将在启动时由bean工厂实例化,这些工厂执行单例的初始化。