【问题标题】:How to decide which spring components should be added into application context?如何决定应将哪些弹簧组件添加到应用程序上下文中?
【发布时间】:2014-07-21 10:34:12
【问题描述】:

我需要一种机制来决定哪些组件应包含在应用程序上下文中。目前,我为此使用@Import。无论它是否有效,@Import 仅适用于 @Configuration。有其他选择吗?

编辑:

我使用@ComponentScan 注册spring beans 和组件。我有一个带有@Controller 注释的控制器的目录。出于测试目的,我不想注册所有控制器,而只是特定的。我可以使用类似的东西

目前我使用

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestConfiguration.class)
@Transactional
@TransactionConfiguration(defaultRollback = true){/*testings*/}

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = {AccountsRepository.class, LogoutService.class})
@Import({AccountCommandsController.class})
public class TestConfiguration {}

@Import 对我有用,但它仅用于配置,不适用于注册控制器组件。控制器或组件是否有等价物?

【问题讨论】:

  • 个人资料?导入选择器?请更具体地说明您的需求。
  • 有什么理由不在您的测试配置中声明特定的 bean?
  • 我只知道 "@ComponentScan" 用于注册 bean,当然还有 "@Bean"。如何只声明特定的bean?
  • 只需将@Bean 与您的控制器类一起使用。

标签: java spring spring-mvc


【解决方案1】:

如果使用的是 Spring 3.1,那么在有条件地需要在应用程序上下文中包含 bean 的情况下,您真的应该使用 Spring Profiles。它使设置测试变得非常容易

如果您使用的是 Spring 4 并且您的需求未包含在配置文件中,您可以查看 Spring 的 @Conditional support

如果你使用这种方式,则无需使用@Include。只要有常规的 @Configuration 类,其中整个类都用 @Profile 或特定的 @Bean 方法注释(仅在 Spring 4 中支持)

然后,您可以使用 @ActiveProfiles 激活特定测试所需的任何配置文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2019-09-14
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多