Java SpringMVC的更好实践:具有非固定依赖性的服务
我需要与基于Spring3.2的新体系结构兼容。要求是:http请求将到达一个控制器,该控制器具有一个定义所需对象类型的属性。例如…mycontroller/load?objType='obj1' 我的控制器将具有以下结构:Java SpringMVC的更好实践:具有非固定依赖性的服务,java,spring,spring-mvc,dependency-injection,Java,Spring,Spring Mvc,Dependency Injection,我需要与基于Spring3.2的新体系结构兼容。要求是:http请求将到达一个控制器,该控制器具有一个定义所需对象类型的属性。例如…mycontroller/load?objType='obj1' 我的控制器将具有以下结构: @Controller public class myController{ private ObjectService objectService; @Autowired public setObjectService(ObjectService objectServ
@Controller
public class myController{
private ObjectService objectService;
@Autowired
public setObjectService(ObjectService objectService){
this.objectService = objectService;
}
}
所以在那之后,我需要检查这个属性来决定我将使用哪个服务。例如,这种情况是Obj1Service(方法:“加载”)。所有这些服务都是从ObjectService扩展而来的,所以:在每个传入呼叫中将ObjectService依赖项交换为Obj1Service/Obj2Service是一个好主意?例如:
if(objType.equals("obj1")) this.setObjectService(context.getBean("obj1Service"..))
if(objType.equals("obj2")) this.setObjectService(context.getBean("obj2Service"..))
我知道这不是一个很好的设计,但我们需要将这个新模块与产生这种http请求的其他系统集成。
继承是必要的,因为我们在许多服务的代码中有非常相似的行为,但在内部方法中有修改,所以部分行为将放在ObjectService中(它不是抽象的),而代码的其他部分将放在它的子对象中。还有其他更合适的方法吗?或者你认为这是一个可以接受的解决方案吗?
谢谢 您可以对所有服务使用
映射
,并在每个控制器方法中获得适当的服务
假设您有两项服务:
@Service("obj1")
public class ObjectServiceImpl1 implements ObjectService {
...
}
@Service("obj2")
public class ObjectServiceImpl2 implements ObjectService {
...
}
在控制器中:
private Map<String, ObjectService> objectServices;
@Autowired
public setObjectServices(Map<String, ObjectService> objectServices){
this.objectServices= objectServices;
}
与加载?objType=obj2处理程序相同:
objectServices.get("obj2").doSomething(); // will use ObjectServiceImpl2
等等。您应该有一张服务类型的地图。谢谢!这就是我一直在寻找的!!
objectServices.get("obj2").doSomething(); // will use ObjectServiceImpl2