当前位置: 首页 > 面试题库 >

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

徐昆
2023-03-14
问题内容

在我的具有单个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返回的字符串中获取实例。这是正确的方法吗?


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

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

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

这种变化可以是:

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

然后按键查找



 类似资料:
  • 我有一把刀: 问题是,当我试图使用DAO进行加载调用时,使用DynamoDBMapper以field d1作为哈希键来获取项目,它会抛出一个DynamoDBExc0019,说:为公共DAO. getField2()找到了空键,但实际上表的值对应于field d2。问题,这是因为Lombok注释而不是手动突变代码,还是一般来说我们一起使用Lombok和DynamoDBAnnotions?

  • 我正在尝试测试一个用Declaratice Services注释()注释的OSGi服务。我已经根据AEM多项目示例生成了我的项目。 每当我在IntelliJ中运行此测试时,OSGi Mock都会抱怨测试类中缺少SCR元数据。 这是否意味着我只能测试带有ApacheFelix附带的旧SCR注释的类?OSGi模拟的文档表明2.0版支持声明性服务注释。0及以上。我使用的版本符合此标准。

  • 问题内容: 之间有什么区别? 在整个类中添加“ @Transactional”注释 为每个方法添加“ @Transactional”注释? 使用spring和Hibernate吗? 问题答案: 基本上,如果您用所有方法注释该类,则将是事务性的。如果您不这样做,则可以仅将其标注为所需的方法。此外,你可以为每个方法指定不同的属性,如,,,…

  • 我正在将ApacheFelixSCR注释迁移到OSGI声明性服务[AEM]。在迁移过程中,我无法在DS中找到基数的精确替换。 现有的SCR实施: 现在它在OSGi声明性服务中迁移如下 在DS注释实现中,我必须映射@Property中存在的参数基数。请推荐我

  • 我正在AWS上运行CoreNLP专用服务器,并试图从Ruby发出请求。服务器似乎正确地接收了请求,但问题是服务器似乎忽略了input annotators列表,并且总是默认为所有annotators。我生成请求的Ruby代码如下所示: 在服务器上的nohup.out日志中,我看到以下内容: 当我在命令行上使用wget运行测试查询时,它似乎工作得很好。 任何关于为什么会发生这种情况的帮助都将被接受,

  • 我看过一些教程,它们使用不同的语法来完成相同的任务。一旦通过控制器收到创建学生对象的POST请求,服务层就会使用这两种方法注入存储库。 方法1: 以及方法2: 我读到它与构造函数和字段注入有关,但我真的不明白这种语法是如何解决这种差异的。有什么解释或资源让我更好地理解吗?提前谢谢你!