一尘不染

Spring MVC 3.0-使用注释的服务层

spring-mvc

在我的具有单个Controller类的Spring MVC应用程序中,

@Controller
public class MyController {
@RequestMapping(method = RequestMethod.POST, value = "/*.htm")
public myMethod{@RequestBody final MyRequestBean myRequest}

}

我的输入采用JSON形式,我使用Jackson将其转换为Java对象。现在,基于Java对象中的属性,我想发送到适当的服务类。如果是,

myRequest.value == "1" -> FirstService
myRequest.value == "2" -> SecondService

所有这些Service类都将实现一个基本接口。我不想在我的Java代码中执行此实例化。如何将其移至配置文件。如何根据请求值动态注入这些对象。请注意,正在使用注释。我是Spring的新手,请告知

编辑:
在我的dispatcher.xml中 包括我的解决方案

`<util:map id="myMap">
<entry key="service1" value="com.service.MyService1" /> 
<entry key="service2" value="com.service.MyService1" />
</util:map>`

在我的控制器中

@Resource private Map myMap;

在控制器内部的方法中
MyService myService = (MyService) Class.forName((String)myMap.get(myRequest.getValue())).newInstance(); System.out.println("My value" + myService.doService());

可以看出,已经使用Java反射从XML返回的字符串中获取实例。这是正确的方法吗?


阅读 344

收藏
2020-06-01

共1个答案

一尘不染

  1. 创建一个创建所有可能实例之一的FactoryBean
  2. 使用线程本地持有人RequestAttributes获取请求
  3. 使控制器 @Scope("request")
  4. 通过接口注入服务

这应该使控制器变得容易。但这是一个丑陋的方法。这是另一个:

  1. 注入一个 List<YourInterface>
  2. 在界面中定义方法 getImplementationId()
  3. 在每个请求上迭代列表并选择返回正确ID的实现

这种变化可以是:

  • 使用键(来自json的键和值)预填充Map-特定的impl
  • 在实现bean名称中包含jsod键,并注入一个 Map<String, YourInterface>

然后按键查找

2020-06-01