首页 > 解决方案 > 创建外观组件时将特定组件添加到 Spring Context

问题描述

我不想让我的一些类变成@Autowire很多小@Component的 s,我想创建一个@Component可以收集并转发到更小@Component的 s 的单曲。

编码本身并不太难,但是当涉及到测试时,它变得很麻烦,因为现在我必须将它添加到@ContextConfiguration(classes). 有没有办法让我不必单独管理它?

使用@ComponentScan添加了我可能不想要的整个包,因为它会触发更多@MockBean的创建。

标签: javaspringtesting

解决方案


在我看来,您正在寻找的是@Configuration + @Bean. @Bean您可以通过使用简单的 pojo-s 而不是 spring 管理的 bean来初始化完整的链,而不是使用 @Component 标记所有嵌套的子组件。当然,最终结果将是一个 spring 管理的 bean,但是在初始化过程中,您可以从任何有 spring 或没有 spring 的地方初始化它。

关于 ComponetScan。通常,如果我只想加载某个部分,我会使用我想要的 conponenbt 扫描的显式模式创建注释,然后在我想要的域中使用它。

例如,假设我们有两组 Mapper 类,一组与订单有关,另一组与库存有关。我可以在它们上创建带有适当组件扫描注释的注释@EnableOrderMappers和注释。@EnableInventoryMappers


推荐阅读