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

我有一些带有自定义注释的类,不应实例化(抽象类,它只是真实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添加到Spring上下文 的全部内容, 来源链接: utcz.com/qa/405046.html

回到顶部