没错,通过手动创建对象,您不会让Spring执行自动装配。还考虑在Spring之前管理您的服务:
@Componentpublic class MyServiceFactory { @Autowired private MyServiceOne myServiceOne; @Autowired private MyServiceTwo myServiceTwo; @Autowired private MyServiceThree myServiceThree; @Autowired private MyServiceDefault myServiceDefault; public static MyService getMyService(String service) { service = service.toLowerCase(); if (service.equals("one")) { return myServiceOne; } else if (service.equals("two")) { return myServiceTwo; } else if (service.equals("three")) { return myServiceThree; } else { return myServiceDefault; } }}但我认为总体设计会很差。那岂不是更好有一个一般的
MyService执行和传递
one/
two/
three字符串作为额外的参数
checkStatus()?您想实现什么?
@Componentpublic class MyServiceAdapter implements MyService { @Autowired private MyServiceOne myServiceOne; @Autowired private MyServiceTwo myServiceTwo; @Autowired private MyServiceThree myServiceThree; @Autowired private MyServiceDefault myServiceDefault; public boolean checkStatus(String service) { service = service.toLowerCase(); if (service.equals("one")) { return myServiceOne.checkStatus(); } else if (service.equals("two")) { return myServiceTwo.checkStatus(); } else if (service.equals("three")) { return myServiceThree.checkStatus(); } else { return myServiceDefault.checkStatus(); } }}这 仍然
设计不佳,因为添加新的
MyService实现也需要
MyServiceAdapter修改(违反SRP)。但这实际上是一个很好的起点(提示:地图和策略模式)。



