Java Spring、MVC和重用模型部分的策略
我正在努力理解什么是重用某些代码的最佳策略。通常,我在Spring中的控制器为:Java Spring、MVC和重用模型部分的策略,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在努力理解什么是重用某些代码的最佳策略。通常,我在Spring中的控制器为: @Controller public class PageX1{ @Autowired HeaderService header; @Autowired CatalogService catalog; @RequestMapping("/test1") public String controller(Map<String, Object> model) {
@Controller
public class PageX1{
@Autowired
HeaderService header;
@Autowired
CatalogService catalog;
@RequestMapping("/test1")
public String controller(Map<String, Object> model) {
setHeaderObjectsIntoModel(model, "a param");
setCatalogObjectsInyoModel(model, "another param", 1212, "more params");
}
private setHeaderObjectsIntoModel(Map<String, Object> model, String aParam){
Object value = header.getObjectWithParam(aParam);
model.put("key", value);
}
....
}
@控制器
公共类第1页{
@自动连线
HeaderService头;
@自动连线
目录服务目录;
@请求映射(“/test1”)
公共字符串控制器(映射模型){
setHeaderObjectsIntoModel(模型,“参数”);
setCatalogObjectsInyoModel(模型,“另一个参数”,1212,“更多参数”);
}
私有SetHeaderObject对象模型(映射模型,字符串APRAM){
对象值=header.getObjectWithParam(aParam);
模型。put(“键”,值);
}
....
}
我可能需要在另一个控制器中重用与服务S1相关的部件,例如
@Controller
public class PageX2{
@Autowired
HeaderService s;
@RequestMapping("/test2")
public String controller(Map<String, Object> model) {
setHeaderObjectsIntoModel(model, "a new param");
}
}
@控制器
公共类第2页{
@自动连线
校长服务;
@请求映射(“/test2”)
公共字符串控制器(映射模型){
setHeaderObjectsIntoModel(模型,“一个新参数”);
}
}
S2也是一样,一次又一次。
我不想重复代码。我有一些想法,但我认为没有什么好的(比如有一个用@Component
注释的类,该类实现了一个旨在处理模型的接口,但我应该使参数通用,并且我希望使其特定以最小化错误)
正确的方法应该是什么?
任何例子都非常受欢迎您有两个选择。第一个选项,您可以拥有一个基本控制器,该控制器提供将由您的控制器继承的通用功能
public abstract class AbstractPage{
@Autowired
private HeaderService s;
protected Object retrieveObjectWithParam(String param){
return s.getObjectWithParam(param);
}
}
@Controller
public class PageX1 extends AbstractPage{
@RequestMapping("/test1")
public String controller(Map<String, Object> model) {
Object headerParam = retrieveObjectWithParam("a param");
model.put("key" , headerParam);
}
}
@ControllerAdvice
public class PageAdvice{
@Autowired
private HeaderService s;
@ModelAttribute("headerParam")
public Object retriveHeaderParm(){
return s.getObjectWithParam("a param");
}
}
你想在多个控制器之间共享模型属性吗?这是可能的,想想标题上的类别吧。我没有回答你的问题,还有,回答我的评论。你想在不同的控制器之间共享一些模型参数吗?我想你需要提供一个更具体的例子;很难确切地说出您要重用哪种代码。头服务?这个问题仍然太模糊,难以清楚地解决。您可能对带有
@modeldattribute
的@ControllerAdvice
或类似Groovy traits的东西感兴趣。很抱歉,我不得不在工作中完成一些代码。因此,控制器建议解决方案非常好。我想知道如何将参数传递给使用@ModelAttribute的方法,以便根据当前控制器计算值