我在基于 Spring 的应用程序中定义了"prod"和"dev"配置文件。
我有一个定义为处理生产数据的服务。我需要一个开发版本来返回一些模拟数据。
我已将开发服务定义如下:
@Profile('dev')
public DevService implements AService { ... }
我的生产服务定义为:
@Profile('prod')
public ProdService implements AService { ... }
出于开发目的,我只是将"dev"配置文件添加到现有配置文件中,其中还包含"prod"配置文件:
spring.profiles.active="prod","profile1","profile2","dev"
我知道为了避免冲突,我必须使用非开发配置文件定义 ProdService:
@Profile('!dev')
public ProdService implements AService { ... }
但是我想知道有没有办法将"prod"配置文件保留为ProdService
,并使用基于注释的方法以某种方式定义加载 bean 的顺序或优先级?
虽然可以使用像@Order
、@DependsOn
、@Primary
这样的注解,@Lazy
但没有明确的 Spring bean 顺序。这取决于上下文中单例 Bean 之间的依赖关系。例如,如果 beanA
使用构造函数注入@Autowried
并且依赖于 beanB
则必须先初始化B
。
在您的示例中,您可以使用@Primary
@Profile('dev')
@Primary
public DevService implements AService { ... }
但是,如果您按类型自动布线,则只能有一个@Primary
Bean。拥有多个将使您回到原点,并且豆子不会自动连线。