将自定义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