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