【发布时间】:2014-04-01 06:13:28
【问题描述】:
我有以下代码,我根据请求手动获取类的实例以进行处理。
假设我有一个接口,每个类都会实现:
interface fooBar{
}
以下是我在其中实现该接口的类,每个类根据请求具有不同的主体:
class AddFoo implements fooBar{
}
class DeleteFoo implements fooBar{
}
class AddBar implements fooBar{
}
class DeleteBar implements fooBar{
}
以下是根据请求手动返回实例的类:
class ProcessAllRequest{
@Autowired
private AddFoo addfoo;
@Autowired
private DeleteFoo deletefoo;
public fooBar fooBargetProcessor(fooBar f){
if(f.getClass.equals(AddFoo.class)){
return addfoo;
}else if(f.getClass.equals(DeleteFoo.class)){
return deletefoo;
}else return null;
}
}
我也尝试过return new AddFoo();,但这给了我空实例,所以我使用了Autowired,并且工作得很好。
现在,当我在任何类中调用 fooBargetProcessor(fooBar f) 来处理请求时,它会根据请求为我提供该类的实例。
所以我的问题是,有没有什么方法可以在没有@Autowired 和fooBargetProcessor() 方法中的其他静态数据的情况下自动获取实例?
更新:
我已经用其他方法名ProcessRequest()调用了这个方法。
尽管我已经使用 ModelMapper 制作了命令并使用表单数据映射了每个命令。
喜欢:
ModelMapper mapper = new ModelMapper();
AddFoo f = mapper.map(form, AddFoo.class);
ProcessRequest(f);
在ProcessRequest() i have called fooBargetProcessor() 方法中。
示例类代码:
@Controller
@RequestMapping(value = "/api/foo")
public class Foo extends BaseApi{
@RequestMapping(method= RequestMethod.POST,consumes = "application/json")
public @ResponseBody
String add(@RequestBody AddFooForm form){
ModelMapper mapper = new ModelMapper();
AddFoo f = mapper.map(form, AddFoo.class);
ProcessRequest(f);
return "Hello";
}
}
现在根据对 /api/foo/ 的请求,它将传递给各种方法,例如如果 POST 然后添加和 PUT 然后更新,如果 DELETE 然后删除方法等,以解释我的项目的完整流程和代码有点不可能,因为制作第一个骨架需要很长时间。
现在根据控制器中的请求,我必须根据请求映射数据并在该控制器类中调用方法ProcessRequest()。
哪位知道的请指教一下。
【问题讨论】:
-
我不知道@Autowired 是如何工作的,但你的函数 fooBargetProcessor 不应该有返回类型吗?
-
您的代码不会运行(缺少返回类型),我看不到您的代码打算做什么。
-
是的,我没有在这段代码中提供返回类型,但实际上都有返回类型,所以它会运行,我只想要类的单例实例。
-
好的,所以你想使用每个类的特定实例,即使你有其他实例存在(所以它不是真正的单例)。我想更多地了解您的设计,以及您是如何产生这个想法的?
-
先生,我已经用其他流程和数据更新了我的代码实际工作方式的问题。
标签: java spring-mvc singleton instance