将分别寻找和它们类型匹配的 Bean,将它们作为 CountryService (Bean1 bean1 ,Bean2 bean2) 的入参来创建
CountryService Bean。
类级别(Type-level),就是注释定义在类定义的上面。
方法级别(Method-level),就是注释定义在方法定义的上面。
A.2、@RequestMapping的属性
value
通过这个注释表达主要的映射。
在Servlet环境中,映射路径(如,/myPath.do),也支持Any风格的(如,/myPath/*.do)。在方法级别中的相对路径需要类级别的主路径支持。
@RequestMapping("/a")就等同于@RequestMapping(value="/a")
method
通过HTTP请求的method来缩小主映射的范围。GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE.
支持定义在类级别或方法级别。
@RequestMapping(value="/b",method=RequestMethod.POST)
params
通过映射请求的参数来缩小主映射的范围。
在任何环境下,"myParam=myValue"风格的表达式,只有当请求有这样的参数映射才会被执行。可通过"!="操作符来表示否定,如"myParam!=myValue"。"myParam"风格的表达式也支持,主要在请求中出现该参数不管值为多少。"!myParam"的表达式表示指定的参数不能在请求中出现。
支持定义在类级别或方法级别。
@RequestMapping(value="/b",params="myParam")
headers
通过请求的header来缩小主映射的范围。
在任何环境下,"My-Header=myValue"风格的表达式,只有当请求有这样的header才会被执行。可通过"!="操作符来表示否定,如"My-Header!=myValue"。"My-Header"风格的表达式也支持,主要在请求中出现该header不管值为多少。"!My-Header"的表达式表示指定的header不能在请求中出现。
也支持(*),例如,
@RequestMapping(value = "/something", headers = "content-type=text/*")
ModelAndView
ModelAndView(Servlet或Portlet),这个模式隐含command对象和@ ModelAttribute注释的结果。
举例说明
@RequestMapping("/hello.do")
public ModelAndView helloWorld() {
ModelAndView mv=new ModelAndView();
mv.setViewName("helloWorld");
mv.addObject("attributeName", "attributeValue");
return mv;
}
通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法指定页面名称,使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。调用addObject()方法将值设置到一个名为ModelMap的类属性,ModelMap是LinkedHashMap的子类,具体请看类。
Model
返回一个Model对象来表示模型,而视图名则利用RequestToViewNameTranslator把请求转换为视图名称。
举例说明
@RequestMapping("/helloWorld.do")
public Model helloWorld() {
Model model=new ExtendedModelMap();
model.addAttribute("attributeName", "attributeNameValue2");
return model;
}
这里用Model的一个实现ExtendedModelMap来表示model,RequestToViewNameTranslator把请求"/helloWorld.do"转换为视图名为helloWorld。若请求为/a/b.form,则视图名为a/b。
Map
返回一个Map对象来表示模型,而视图名则利用RequestToViewNameTranslator把请求转换为视图名称。
举例说明
@RequestMapping("/helloWorld.do")
public Map<String, String> helloWorld() {
Map<String, String> map = new HashMap<String, String>();
map.put("attributeName", "attributeNameValue");
return map;
}
这里用map表示model,RequestToViewNameTranslator把请求"/helloWorld.do"转换为视图名为helloWorld。若请求为/a/b.form,则视图名为a/b。
View
A View object, with the model implicitly determined through command objects and ModelAttribute annotated reference data accessor methods. The handler method may also programmatically enrich the model by declaring a Model argument (see above).
String
返回一个Map对象来表示视图名,处理器中对于的方法也可以通过声明一个ModelMap的参数来表示model。
举例说明
@RequestMapping("/helloWorld.do")
public String helloWorld(ModelMap model) {
model.addAttribute("attributeName", "attributeNameValue3");
return "helloWorld";
}
这里返回的字符串"helloWorld"表示视图名称,而ModelMap类型的参数表示model。也可以把参数定义为Model类型。