gpt4 book ai didi

java - 在 Spring MVC 3 中使用工厂模式实例化 bean

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:15 24 4
gpt4 key购买 nike

我在本地初始化的 REST Web 服务 Controller Web 方法中获取了对象。

@RequestMapping(method = RequestMethod.POST,value = "/test",headers="Accept=*/*")
public @ResponseBody ModelAndView computeDetails(@RequestBody RequestObj reqObj, ModelMap model) {

System.out.println(reqObj.getcode());

return new ModelAndView("responsedetails", "object", reqObj);
}

此 RequestObj 对象包含使用工厂实例化依赖项的关键代码

已经定义了实现 BaseCode 接口(interface)的不同代码类。

如何使用工厂方法根据作为 BaseCode 类型传入我的服务 bean 中的代码值来实例化特定代码类?

有什么想法吗?提前致谢。

最佳答案

遇到这种情况我通常会做的是:

  1. 使用Spring将工厂注入(inject) Controller 中的 bean
  2. 创建一个方法 getBaseCode(String code)在工厂中(请注意:String这里代表代码类型,所以如果没有String则使用实际的代码类型
  3. 制作getBaseCode返回 BaseCode在构建真正的实现时构建接口(interface)
  4. 假设您有 execute BaseCode中的方法,使用getBaseCode方法进入 Controller 以获取真正的协作者,然后调用execute执行实际操作的方法


忽略第一点(我认为你可以轻松地查看任何 Spring 教程)工厂将类似于

public class BaseCodeFactory {
public BaseCode getBaseCode(String code) {
if(code.equals("something")) return new ThisBaseCodeImpl();
else //and so on
}
}

同时computeDetails变得类似于:

@RequestMapping(method = RequestMethod.POST,value = "/test",headers="Accept=*/*")
public @ResponseBody ModelAndView computeDetails(@RequestBody RequestObj reqObj, ModelMap model) {
//...
factory.getBaseCode(reqObj.getcode()).execute();
//...
}

作为旁注,我不会选择像我在这里选择的那样的名称,我建议您在您的域中寻找更有意义的名称(例如 BaseCode 没有任何意义),将此片段作为指令。

基于OP评论。如果您有ThisBaseCodeImpl它利用了您可以使用的其他 Spring bean

  1. @Configurable 进行注释所以,当您使用new ThisBaseCodeImpl(/*args if you like*/)时它的bean由Spring实例化。我个人不喜欢这个解决方案,因为在我看来,它用隐藏的 Spring 的 bean 污染了代码。另一方面,它非常灵活,因为它允许您管理运行时构造函数参数和 Spring bean
  2. 添加ThisBaseCodeImpl到 Spring 上下文并更改工厂,以便 ThisBaseCodeImpl 的协作者被注入(inject)其中。

第一点示例:

@Configurable
public class ThisBaseCodeImpl {
@Resource
private Bean bean;
}

第二点示例:

public class BaseCodeFactory {
@Resource
ThisBaseCodeImpl thisBaseCodeImpl;

public BaseCode getBaseCode(String code) {
if(code.equals("something")) return thisBaseCodeImpl;
else //and so on
}
}

关于java - 在 Spring MVC 3 中使用工厂模式实例化 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com