当前位置: 首页 > 知识库问答 >
问题:

如何强制Spring一次创建所有声明的bean,它们的配置类被发现了?

子车宏浚
2023-03-14

我有几个配置类的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类的EACH bean在某些全局上下文中注册。并且其他Bean bean使用此全局上下文来获取MyBean类的所有实例。但是Spring比几个MyBean bean更早创建其他Bean,我不知道如何改变这种行为。

PS:

  1. 我不想直接(显式地)将所有MyBean bean注入其他Bean,有很多MyBean bean。
  2. 现在我有一个解决方案:在类ConfigB上声明注解@DependsOn({"bean_1","bean_2"......"bean_99"}),但我认为不方便(几乎是同一点1)。
  3. 我认为一个解决方案可以是在发现这个配置类(ConfigA)后强制Spring创建所有声明的bean(bean_1,...)。

共有2个答案

董阳平
2023-03-14

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

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

洪涵亮
2023-03-14

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

 类似资料:
  • 问题内容: 我有这个新的mvc项目,其中所有bean都是默认作用域的(没有原型或会话)。与单个应用程序上下文。 我想通过使所有bean都成为默认范围来知道我们是否试图使整个应用程序在单线程中运行? 如果是这样的话,是否会使每个httprequest(来自多个或相同会话)排队,直到上一个完成?如何避免这种情况,任何建议或链接都​​将有所帮助。 我对Spring和Java开发相对较新。 问题答案: 由

  • 这是一个关于Spring默认行为的问题。假设我有一个名为BeanA的单例bean,它有一个与名为Beanb的单例bean的构造函数依赖关系。为了满足这种依赖性,必须在BeanA之前创建BeanB。如果两个bean都实现了DisposableBean接口,我希望destroy方法的调用顺序与创建bean的顺序相反,但是我在文档中看不到它。我找到的最好的文档是DependsOn注释(https://d

  • 问题内容: 我想创建一个内部类的Spring Bean。如果我有以下内部类: 我想在我的XML配置文件中创建bean实例。 问题答案: 您不能使用点()表示法访问公共静态内部类,而应使用货币()。一个例子: 这将起作用。

  • 编辑:为了澄清,我对main方法中所需的代码感兴趣,这些代码是如何在bean在各自的类中设置后获得它的实例的。

  • 问题内容: 对我的头衔表示歉意,我无法正确表达问题。 我已经看到有两种实现方式。首先通过表示您的类已实现来完成。第二个任务是让您自己声明完成任务。 为什么在第一种选择中,您可以简单地将其作为参数,而在第二种选择中,则必须麻烦自己创建对象? 首先: 第二: 问题答案: 在第一种方法中, 整个Activity类都 实现了该接口。您可以将每个View的设置 为此 ,并通过一种方法接收所有click事件,

  • 问题内容: 创建新Hibernate会话时,是否有办法拦截它们?我需要访问每个Session实例以启用带有参数的Hibernate过滤器。 我唯一可行的解​​决方案是包装SessionFactory,但这涉及到许多半讨厌的骇客,并且它要求我实现大约60种方法,其中只有少数几种很有趣。 由于某些令人讨厌的原因,Hibernate的SessionFactory实现被声明为final,因此扩展它不是一种