在我的一些接口的 Spring Boot 应用程序中,我有几个实现(通常是“主要实现”和“本地测试的实现”),我使用不同的配置文件。我知道告诉 spring 使用特定实现的几个选项。
- 将
@Profile
/添加@Conditional
到用@Component
. 优点:容易。缺点:我不喜欢关于配置文件的信息分散在组件中的事实。 - 从实现中删除注释并在特定于配置文件( )
@Component
中实例化组件。优点:需要更多代码。缺点。所有配置文件特定的组件都位于一个位置。@Configuration
@Bean SomeService() { return new DefaultSomeService(); }
- 排除(通过
@Component
在实现中@ComponentScan
添加显式自定义注释@IgnoreComponentScan
以防止歧义)并在特定于配置文件的@Configuration 中实例化组件。接近第二个选项,但使组件更加清晰(我们可以保留@Repository
/@Service
注释)
还有其他选择吗?哪种方式更合适?