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

Igo*_*nov 5 java spring

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

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

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

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

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

Bij*_*men 4

您的观察实际上是正确的,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);
Run Code Online (Sandbox Code Playgroud)