如何在具有多个配置文件的基于注释的配置中设置bean加载顺序?

时间:2018-04-04 08:23:46

标签: java spring spring-annotations

我有' 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的顺序或优先级?

1 个答案:

答案 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不会自动连接。