在Spring MVC中,@ModelAttribute注解主要用来在controller方法执行之前,将指定的对象添加到model中,以便在页面中使用。当在父类和子类中同时使用@ModelAttribute注解时,其执行顺序是有所区别的,下面是具体的讲解:
@ModelAttribute在父类和子类中的执行顺序
- 当在父类和子类中都有@ModelAttribute注解时,先执行父类的@ModelAttribute方法,再执行子类的@ModelAttribute方法。
示例代码如下:
@Controller
@RequestMapping("/test")
public class BaseController {
@ModelAttribute("msg")
public String baseModelAttribute() {
return "Hello, Base Controller!";
}
}
@Controller
public class ChildController extends BaseController {
@ModelAttribute("msg")
public String childModelAttribute() {
return "Hello, Child Controller!";
}
@RequestMapping("/child")
public String child() {
return "child";
}
}
当执行child()方法时,先会执行父类的baseModelAttribute()方法,将"Hello, Base Controller!"添加到model中,然后执行子类的childModelAttribute()方法,将"Hello, Child Controller!"覆盖之前的数据,再将最终结果添加到model中。最终,页面中可以使用${msg}
获取到"Hello, Child Controller!"这个值。
- 在父类中使用@ModelAttribute注解,而子类中没有使用该注解时,先执行父类的@ModelAttribute方法,再执行子类的handler方法。
示例代码如下:
@Controller
@RequestMapping("/test")
public class BaseController {
@ModelAttribute("msg")
public String baseModelAttribute() {
return "Hello, Base Controller!";
}
}
@Controller
public class ChildController extends BaseController {
@RequestMapping("/child")
public String child(Model model) {
return "child";
}
}
当执行child()方法时,先会执行父类的baseModelAttribute()方法,将"Hello, Base Controller!"添加到model中,然后再执行子类的child()方法,将视图逻辑名"child"返回。最终,页面中可以使用${msg}
获取到"Hello, Base Controller!"这个值。
以上就是@ModelAttribute在父类和子类中的执行顺序的讲解,希望可以帮助大家更好地理解@ModelAttribute注解的使用方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:说说@ModelAttribute在父类和子类中的执行顺序 - Python技术站