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

向Spring上下文添加自定义bean

傅博容
2023-03-14

我有一些不应该实例化的带有自定义注释的类(抽象类,它只是实际bean的子组件)。但是在这些类之上,在运行时,在上下文初始化阶段,我想在应用程序上下文中添加额外的bean。

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

似乎是spring-mvc、spring-tasks和spring-integration在做这件事(我试着从源代码中学习--没有运气)

我发现我可以创建自己的BeanFactoryPostProcessor、扫描类路径并为我的自定义bean调用RegisterSingleton。但是我不确定它是否是引入新bean的好方法(似乎它只用于exising bean的postprocess)。而且我相信有一些Spring内部工具,我可能会重用它们来简化流程。

共有1个答案

苗阳文
2023-03-14

您的观察实际上是正确的,BeanFactoryPostProcessor是Spring提供的两种机制之一,即在将bean定义/实例提供给应用程序之前修改它们(另一种是使用BeanPostProcessors)

您完全可以使用BeanFactoryPostProcessors来添加/修改bean定义,这里有一个来自Spring Integration codebase的示例,它添加了一个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引入当前的应用程序上下文中。 似乎spring-mvc,spring-tasks和spring-integration正在这样做(我试图从源中学习它-没运气) 我

  • 我有一个自定义验证属性 假设我有一个实现ValidationAttory的HelloWorld类。然后我将此属性应用于我的API中的一个字段。 当我生成Swagger UI时,我得到一个JSON OpenAPI规范,模型显示每个字段的属性,如下所示: 如果我添加了一个必需的标记,如果我使用诸如RegularExpression/Range/StringLength之类的属性,则会显示一个星号,文本

  • 请帮帮我!!我到处找了很多,找到了任何有用的信息,或者我有,但我不能在这么短的时间内测试我在web上找到的所有东西,而且spring文档似乎只对普通情况和xml配置非常好,不适合我试图做的疯狂的事情,也不适合编程配置。

  • 我正在从事一个包含如下代码的项目:如何将具有自定义ID的文档添加到firestore(Angular) 当我要尝试这个应用程序时,它总是崩溃。但是代码都是一样的。 我在LogCat中得到的错误是: 无效的文档引用。文档引用必须有偶数个段,但用户有1个 我的完整代码如下: 我希望“user\u id”是文档id,而不是Firestore生成的另一个id。 有人能帮忙吗?提前谢谢你。

  • 搜索很好,它在工作,我正在过滤的交易类型(出售或出租)和房间数量在每个房地产。 但是我的JSON响应缺少很多字段,包括ACF。例如:{ “id”:149,“post_author”:“2”,“post_date”:“2016-03-03 23:53:39”,“post_date_gmt”:“2016-03-03 23:53:39”,“post_content”:“”post_title“:”opo

  • 我想添加“from”(date)来响应datepicker输入,但到目前为止,我有一些奇怪的行为。 我的代码: 到目前为止,我试过: 和 但这两种解决方案都将我的日期从“2020年9月14日16:43”转变为“从周一9月14 2020 17:19:38格林尼治标准时间0400(留尼汪岛)”,这是不必要的行为,因为我绝对想要法语日期。任何想法?谢啦