我有一些带有自定义注释的类,不应该实例化(抽象类,它只是真正的bean的子组件).但是在这些类之上,在运行时,在上下文初始化阶段,我想将额外的bean放入应用程序上下文中.
因此,基本上我需要扫描类路径,处理结果,并将新bean引入curent应用程序上下文.
似乎spring-mvc,spring-tasks和spring-integration正在这样做(我试图从源头学习它 - 没有运气)
我发现我可以创建自己的BeanFactoryPostProcessor扫描类路径并调用registerSingleton我的自定义bean.但是我不确定这是引入新bean的好方法(似乎它只用于exce beans 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10451 次 |
| 最近记录: |