1

在我与单个控制器类的Spring MVC应用服务层,Spring MVC的3.0 - 使用annonations

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

} 

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

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

所有这些服务类将实施一个基本接口。 我不想在我的Java代码中做这个实例化。我如何将它移动到配置文件中。我如何根据请求值动态注入这些对象。请注意,我正在使用注释。 是新来的Spring.Please建议

编辑:包括我的解决方案
在我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返回的字符串中获取实例。这是正确的方法吗?

回答

3
  1. 创建创建所有可能的情况下
  2. 使用线程局部持有者RequestAttributes获得请求
  3. 使@Scope("request")
  4. 控制器通过接口注入服务的一个FactoryBean的一个

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

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

的变化的implwmentation这可以是:

  • 预填充密钥的地图 - 关键公司明从JSON和价值 - 特定IMPL
  • 包括在实现bean名jsod键和注入Map<String, YourInterface>

然后按键

+0

查找第二种方法(使用列表)类似于我想到的是什么。但有没有更清洁的方法?而不是遍历列表,是否有可能有一个直接的地图。如果这是最后一个选项的建议,请您详细说明 – Raghav

+0

是的,它可以是一个地图,你只需要以某种方式指定键 – Bozho

+0

我会使用一个枚举作为键,我也让enum提供实现类 –