gpt4 book ai didi

java - Spring Boot 在运行时根据请求端点/请求参数注入(inject) bean

转载 作者:行者123 更新时间:2023-11-29 04:14:46 24 4
gpt4 key购买 nike

我有一个具有两个实现的接口(interface),我想有条件地将这两个实现中的任何一个注入(inject)到 spring 引导服务中。

重点是应根据请求消息(映射到 POJO 的 JSON)选择符合条件的实现。

我的搜索让我实现了一个 FactoryBean控制在这两个实现之间进行选择,并让工厂告诉 spring 这些 bean 不是单例的(通过为 isSingleton 方法返回 false)。

但如果这是正确的方法,我仍然不确定如何获取请求消息以检查它并返回正确的 bean。

能否请您告诉我,我是否在正确的轨道上实现了我想要达到的目标?

=============

更新

我不想污染我的代码并处理管理我的服务和服务中的依赖项实现之间的关系。

考虑到我以后需要处理更多的实现,我需要我的服务只关心它的职责。

  1. 我需要我的服务只有一个通用接口(interface)的引用,并以抽象的方式处理它。
  2. 我需要找到一种基于 spring 的方式来根据从请求本身派生的条件为每个请求选择正确的实现,并将其注入(inject)服务。

最佳答案

一种选择是注入(inject)两个 bean 并有条件地选择所需的 bean。您可以将实现相同接口(interface)的类 Autowiring 到 Map 中。

以下示例使用工厂类来隐藏条件检查。

@Component("type1")
public class Type1 implements SomeInterface{}

@Component("type2")
public class Type2 implements SomeInterface{}

@Component
public class MyTypeFactory {

@Autowired
private Map<String, SomeInterface> typesMap;

public SomeInterface getInstance(String condition){
return typesMap.get(condition);
}

}

@Component
public class MyService {
@Autowired
private MyTypeFactory factory;

public void method(String input){
factory.getInstance(input).callRequiredMethod();
}

}

关于java - Spring Boot 在运行时根据请求端点/请求参数注入(inject) bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53097798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com