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



我在基于 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 { ... }

但是,如果您按类型自动布线,则只能有一个@PrimaryBean。拥有多个将使您回到原点,并且豆子不会自动连线。

最新更新