[英]Spring mvc bean acts as controller without @Controller declaration
谁能解释一下用@Controller声明一个类与(用@Scope声明它并在applicationContext.xml中定义一个bean)之间的区别。
这是我的情况。
方法1 :使用@Scope声明类,并在applicationContext.xml中添加bean定义
AbcController.java:
package my.app.controller;
@Scope("singleton")
@RequestMapping(value = "/abc")
public class AbcController {
@RequestMapping(value = "/simulate_abc", method = RequestMethod.GET)
public String getFactorsForSimulate(ModelMap model) {
model.addAttribute("Welcome to the simulations page");
return "simulate_abc";
}
}
applicationContext.xml中
<bean id="abcController" class="my.app.controller.AbcController"/>
方法2 :使用@Controller声明类,并且applicationContext.xml中没有bean定义
package my.app.controller;
@Controller
@RequestMapping(value="/abc")
public class AbcController {
@RequestMapping(value = "/simulate_abc", method = RequestMethod.GET)
public String getFactorsForSimulate(ModelMap model) {
model.addAttribute("Welcome to the simulations page");
return "simulate_abc";
}
}
在这里,这两种方法都给了我预期的结果(将我带到附加到模型的消息带到“ simulate_abc.jsp”)。 我想了解,为什么Approach1不会失败? 尽管它具有RequestMapping,但由于未将其声明为控制器,因此如何解析“视图”? 我感觉Approach1是错误的,因为它不满足弹簧“ MVC”中的“ C”部分。
对于RequestMappingHandlerMapping
来说没有什么区别,只需查看RequestMappingHandlerMapping#isHandler() ,这两个注释都可以使用。
但是,对于诸如AbstractControllerUrlHandlerMapping
层次结构中的其他HandlerMappings
, @Controller
注释可以解决此问题。
请注意,在Spring MVC中,Controller是具有HandlerMapping
映射到请求的任何方法的 任何类 。 还需要一个HandlerAdapter
来执行它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.