Spring从2.5版本开始引入注解,用户可以使用@Controller,@RequestMapping,@RequestParam,@ModelAttribute 等类似这样的注解。到目前为止,Spring的版本虽然发生了很大的变化,但注解的特性却一直延续下来,并不断扩展,让广大的开发者的工作变得更轻松。这都离不开Annotation的强大作用,本次重点讲解SpringMVC4中的常用注解。
(1)@Controller注解
org.springframework.steretype.Controller注解类型用于指示Spring类的实例是一个控制器,使用@Controller注解的类不需要继承特定的父类或者实现特定的接口,相对之前的版本实现Controller接口变得更加简单。而且Controller接口的实现类只能处理一个单一请求动作,而@Controller注解的控制器可以支持同事处理多个请求动作,更加灵活。
@Controller用于标记一个类,使用它标记的类就是一个SpringMVC Controller对象,即一个控制器类。Spring使用扫描机制查找应用程序中基于注解的控制器类。分发处理器会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解,而使用@ RequestMapping注解的方法才是真正处理请求的处理器。为了保证Spring能找到控制器,需要完成两件事情:
在SpringMVC的配置文件的头文件中引入spring-context.
使用<context:compnent-scan/>元素,该元素的功能为:启动包扫描功能,以便注册带有@Controller,@Service,@repository,@Component等注解的类成为Spring的Bean。base-package属性指定需要扫描的类包,类包及其递归子包中所有的类都会被处理。配置文件如下所示:
<context:component-scan base-package="org.fkit.controller"/>
应该将所有控制器类都放在基本包下,并指定扫描该包,即org.fkit.controller, 而不应该指定扫描org.fkit包,以免SpringMVC扫描了无关的包。
示例:@Controller注解的使用
新建一个项目ControllerTest,加入所需要的jar文件,新建HelloWorldController类:
代码如下:
package org.fkit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorldController {
@RequestMapping("/helloWorld")
public String helloWorld(Model model) {
model.addAttribute("message", "Hello World!");
return "helloWorld";
}
}
HelloWorldController是一个基于@Controller注解的控制器,@RequestMapping注释用来映射一个请求,value="/helloWorld"表示请求由helloWorld方法进行处理。helloWorld方法接收一个org.springframework.ui.Model类型的参数,本例在model中添加了一个名为"message"的字符串对象,该对象可以在返回的视图当中通过request对象获取。最后,方法返回一个字符串"helloWorld"作为视图名称。
新建springmvc-config.xml:
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://w