Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何强制spring在发现配置类后立即创建所有声明的bean?_Java_Spring - Fatal编程技术网

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

Java 如何强制spring在发现配置类后立即创建所有声明的bean?,java,spring,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 */ } /* ... */

我有几个配置类的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使用这个全局上下文来获取MyBean类的所有实例。但是spring比MyBean更早地创建了OtherBean,我不知道如何改变这种行为

附言:

  • 我不想将所有MyBean直接(明确地)注入OtherBean,有很多MyBean
  • 现在我有了一个解决方案:在ConfigB类上声明注释@DependsOn({“bean_1”,“bean_2”…“bean_99”}),但我认为这很不方便(这几乎与第1点相同)
  • 我认为一个解决方案是,一旦发现这个配置类(ConfigA),强制spring创建所有声明的bean(bean_1,…)

  • 添加@Autowired列表;字段到您的配置?这将把所有注册的bean注入到一个列表中,因此希望spring能够以某种方式检查这些bean是在哪里创建的。

    add@Autowired list;字段到您的配置?这将把所有注册的bean注入到一个列表中,希望spring能够以某种方式检查这些bean是在哪里创建的。

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

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


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

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


    在您的情况下可能会有所帮助可能会尝试添加@Autowired List;字段到您的配置?这将把所有注册的bean注入到一个列表中,所以希望spring能以某种方式检查这些bean是在哪里创建的。@freakman Thx,它解决了我的问题,如果你发布一个答案(不是评论),我会将其标记为正确答案。在您的情况下可能会有所帮助可能会尝试添加@Autowired List;字段到您的配置?这将把所有注册的bean注入到一个列表中,所以希望spring能以某种方式检查这些bean是在哪里创建的。@freakman Thx,它解决了我的问题,如果你发布一个答案(不是评论),我会将其标记为正确答案。