首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >春注册Beans优先于其他一切。

春注册Beans优先于其他一切。
EN

Stack Overflow用户
提问于 2019-02-04 11:24:57
回答 2查看 728关注 0票数 1

在创建每个其他Bean之前,我需要注册一系列的BeanDefinition。这是因为那些注册的Bean(s)是自动连接和ApplicationContext#getBean调用所需要的。

显然,我不能使用@DependsOn

示例:

代码语言:javascript
运行
复制
final var beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(...);
beanDefinition.setLazyInit(true);
beanDefinition.setAbstract(false);
beanDefinition.setAutowireCandidate(true);
beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
beanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE);

registry.registerBeanDefinition("...", beanDefinition);

我可以使用哪个点/接口/lister来获得这个?请记住,我需要一个BeanDefinitionRegistry实例。

按需要添加解释.

这些定义是通过扫描类路径收集的类列表创建的。这些类本身并不是Spring,所以我需要将它们集成到我的ApplicationContext中。然而,这些类接受作为Spring的构造函数参数。

这就是为什么我要

代码语言:javascript
运行
复制
beanDefinition.setAutowireCandidate(true);
beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);

这些新注册的Bean在那里被其他Bean(本地Bean)使用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-04 11:54:36

你试图使解决方案过于复杂。如果您的唯一目标是通过组件扫描检测非@Component注释类,并将它们作为Spring使用,那么只需为@COmponentScan定义一个自定义includeFilter

您可以使用ASPECTJREGEX类型的筛选器来匹配包或类型。

代码语言:javascript
运行
复制
@ComponentScan(includeFilter = @Filter(type=REGEX, expression="com.foo.bar.*))

这样的东西会自动检测你的bean(假设它们在被扫描的包装中),并从它们中创建spring bean。如果它们有一个将自动用于创建实例的构造函数。

票数 1
EN

Stack Overflow用户

发布于 2019-02-04 11:46:29

在上下文中注册一个新的BeanFactoryPostProcessorBeanDefinitionRegistryPostProcessor bean。在扫描bean定义之后,但在构建实际bean之前,将调用此bean:

扩展到标准的BeanFactoryPostProcessor SPI,允许在常规BeanFactoryPostProcessor检测开始之前注册进一步的BeanFactoryPostProcessor定义。特别是,BeanDefinitionRegistryPostProcessor可以注册进一步的bean定义,这些定义反过来定义BeanFactoryPostProcessor实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54515099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档