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