如何在 spring 中自动装配具有特定配置文件的实施者?

How to autowire an implementer with an specific profile in spring?

让我用代码演示一下:

public interface A {
  ....
}

@Profile({"V1"})
@Component
public class B implements A {
....
}

@Profile({"V2"})
@Component
public class C implements A {
....
}

我如何动态地(在每个到达的请求上)使 spring 根据他们的个人资料自动装配上述 classes 之一?甚至可以在布线时做这样的事情吗?

背景:我正在寻求实施服务器端版本控制机制的良好实践。如果请求属于 'V1' 版本,我想使用 'V1' 配置文件自动连接 class,反之亦然。 (目前我正在自动装配一个列表并迭代它们以找到合适的版本)。

答案是否定的,因为当您尝试在 spring 中激活多个配置文件时,例如 -Dspring.profiles.active=profile1,profile2 并且两个配置文件都包含 implements A 然后 spring 将使用implements A 的 bean 的最后活动定义,即在您的情况下 B

你在你想在接口上方注入的地方使用了@Qualifier注解

is it even possible to autowire bean in every request?

不,这不可能。创建上下文时注入 Bean。

I am seeking a good practice to implement server side version control mechanism

你可以关注这个答案How to manage REST API versioning with spring?

public interface A {
  ....
}

@Profile({"V1"})
@Service("bean1")
public class B implements A {
....
}

@Profile({"V2"})
@Service("bean2")
public class C implements A {
....
}

现在第三个class:

class D {
@Autowired
@Qualifier("bean1")
private A a;

}

希望能帮到你