当前位置: 首页 > 面试题库 >

将自定义bean添加到Spring上下文

倪炎彬
2023-03-14
问题内容

我有一些带有自定义注释的类,不应实例化(抽象类,它只是真实bean的子组件)。但是在此类的顶部,在运行时,在上下文初始化阶段,我想将额外的bean放入应用程序上下文中。

因此,基本上,我需要扫描类路径,处理结果,并将新bean引入当前的应用程序上下文中。

似乎spring-mvc,spring-tasks和spring-integration正在这样做(我试图从源中学习它-没运气)

我发现我可以创建自己的BeanFactoryPostProcessor,扫描类路径并调用registerSingleton自定义bean。但是我不确定这是否是引入新bean的好方法(似乎它仅用于exising
bean的后处理)。而且我相信有些Spring内部工具可以重复使用以简化流程。

在Spring上下文初始化中引入额外的bean的常规方法是什么?


问题答案:

您的观察实际上是正确的,BeanFactoryPostProcessor是Spring提供一种在将Bean定义/实例提供给应用程序之前对其进行修改的机制的两种方法之一(另一种方法是使用BeanPostProcessors)

您可以绝对使用BeanFactoryPostProcessors来添加/修改Bean定义,这是Spring
Integration代码库中的一个示例,如果用户未明确指定,则会添加一个errorChannel,您可以使用类似的代码来注册新的Bean:

    RootBeanDefinition errorChannelDef = new RootBeanDefinition();
    errorChannelDef.setBeanClassName(IntegrationNamespaceUtils.BASE_PACKAGE
            + ".channel.PublishSubscribeChannel");
    BeanDefinitionHolder errorChannelHolder = new BeanDefinitionHolder(errorChannelDef,
            IntegrationContextUtils.ERROR_CHANNEL_BEAN_NAME);
    BeanDefinitionReaderUtils.registerBeanDefinition(errorChannelHolder, registry);


 类似资料:
  • 我有一些不应该实例化的带有自定义注释的类(抽象类,它只是实际bean的子组件)。但是在这些类之上,在运行时,在上下文初始化阶段,我想在应用程序上下文中添加额外的bean。 因此,基本上我需要扫描类路径,处理结果,并将新bean引入curent应用程序上下文。 似乎是spring-mvc、spring-tasks和spring-integration在做这件事(我试着从源代码中学习--没有运气) 我

  • 我在spring boot应用程序中实现了firebase消息传递。为此,我创建了一个类似本文所述的bean,以便轻松访问实例。然后,该bean被注入到服务中。然后,当调用利用bean的服务方法时,所述服务被注入到我的控制器中。 现在我的问题是该项目的测试套件(使用JUnit5 根本原因: 注意:这些错误只有在整体运行testsuite时才会出现。如果我自己运行一个测试类,则不会出现错误。 解决这

  • 我对Spring Security有这个问题。 我有一个带有SecurityConfig类的java配置实现,它扩展了WebSecurityConfigureAdapter。 在这个类中,我想重写方法“configure()” 一切正常,一切正常。 问题是Spring Context上没有加载“MyDaoAuthenticationProvider”组件。所以我无法注入或自动安装此类中的任何组件:

  • 问题内容: 我已经构建了自己的自定义react-bootstrap Popover组件: 该组件的呈现方式如下: 现在,我想向组件中添加自定义道具,例如:我的文字,并使用新道具在弹出框中设置一些内容,例如- 但随后我在浏览器中收到此警告: 警告:标签上的未知道具。从元素中删除这些道具。 现在,我想我可以删除零件并逐个插入所有原始道具,而无需自定义道具,但是这样我就失去了“淡入淡出”效果,这也是处理

  • 问题内容: 由于采用了插件架构,因此我试图以编程方式将bean添加到我的webapp中。我有一个通过注释创建的Spring bean ,并且正在实现接口。 我的覆盖函数如下所示: 基本上,我不知道如何向给setApplicationContext的applicationContext对象添加一个bean。谁能告诉我我将如何处理错误的方法? 好的,这就是我最终得到的解决方案: 问题答案: 在Spri

  • 问题内容: 我正在研究启用AJAX的asp.net应用程序。我刚刚向Array.prototype添加了一些方法,例如 该解决方案对我有用,可以以“漂亮”的方式重用代码。 但是,当我测试了它与整个页面一起使用时,我遇到了问题。我们有了一些自定义的Ajax扩展程序,它们开始表现出意想不到的效果:某些控件在其内容或值上显示为“未定义”。 这可能是什么原因?我是否缺少修改标准对象原型的东西? 注意:我很