gpt4 book ai didi

java - 动态选择依赖关系,无需 if else

转载 作者:行者123 更新时间:2023-12-01 19:50:01 25 4
gpt4 key购买 nike

如何在没有 if else 条件的情况下选择依赖关系。

假设我有一个界面:

public interface A{

String doSomething(String req);
}

有两个服务实现A:

@Component
public class FirstImpl implements A{

@override
String doSomething(String req){
return "something";
}
}

和:

@Component
public class SecondImpl implements A{

@override
String doSomething(String req){
return "something";
}
}

现在我创建一个 AdapterService 类:

@Component
public class AdapterService{
@Autowired
private FirstImpl first;
@Autowired
private SecondImpl second;

public getService(String name){
if("name".equals("First")){
return first;
}else if("name".equals("Second")){
return second;
}
}
}

现在调用实现:

@Service
public class BusinessService{
@Autowired
private AdapterService adapterService;

void doSomething(String name,String req){
return adapterService.getService(name).doSomething();
}
}

现在,如果我需要创建另一个实现 A 的类,那么需要在 ServiceAdapter 类中添加条件。就像 "Third".equals(name) 返回另一个注入(inject)的服务。对于每个新服务,都需要添加另一个 if else 条件并注入(inject)相应的服务。我怎样才能避免这个适配器类。 Spring 根据名称动态选择依赖关系。

最佳答案

如果您有权访问applicationContext对象,则可以调用

applicationContext.getBean(name)

并完全避免 ServiceAdapter 类。唯一的事情是你需要将这些 bean 放入容器中。

试试这个:

@Component
public class AdapterService{
@Autowired
private ApplicationContext applicationContext;

public A getService(String name){
return applicationContext.getBean(name,A.class);
}
}

关于java - 动态选择依赖关系,无需 if else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51718836/

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