如果没有其他条件,我如何选择依赖关系。
假设我有一个接口:
public interface A{ String doSomething(String req); }
有两种服务工具A:
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)返回另一个注入服务。对于每个新服务,需要添加其他条件,然后注入相应的服务。我如何避免这种Adapter类。Spring从名称中动态选择依赖关系。
"Third".equals(name)
如果您有权访问applicationContext对象,则可以致电
applicationContext
applicationContext.getBean(名称)
并完全避免使用ServiceAdapter类。唯一的事情是您需要将那些bean放入容器中。
试试这个:
@Component public class AdapterService{ @Autowired private ApplicationContext applicationContext; public A getService(String name){ return applicationContext.getBean(name,A.class); } }