org.springframework.stereotype.Controller注释用于指示Spring类的实例是一个控制器,使用@controller注释的类不需要继承特定的父类或者实现特定的接口,相对之前的版本实现Controller接口变得更加简单。而且Controller接口的实现类只能处理一个单一请求动作,而@Controller注释的控制器可以支持同时处理多个请求动作,更加灵活。
@Controller用于标记一个类,使用他标记的类就是一个Spring MVC Controller对象,即一个控制器类。Spring使用扫描机制查找应用程序中所有基于注释的控制器类。分发处理器会扫描使用了该注释的类的方法,并检测该方法是否使用了@RequestMapping注释,而使用@RequestMapping注释的方法才是真正处理请求的控制器。为了保证Spring能找到控制器,需要完成两件事:
(1)在SpringMVC的配置文件的头文件中引入Spring-context
(2)使用<context:component-scan/>元素,该元素功能为:启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注释的类成为Spring的Bean。
base-package属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。
配置文件如下所示:
<context:component-scan base-package=“org.fkit.controller”/>
应该讲所有控制器类都放在基本包下,并且指定扫描该包,即org.fkit.controller,而不应该指定扫描org.fkit包,以免Spring MVC扫描了无关的包。
@Controller注释的使用
package masterSpringMvc.Controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.ui.Model; @Controller public class HelloController { @RequestMapping("/") public String hello(Model model) { model.addAttribute("message","123456"); return "hello"; } }
Hello是一个基于@Controller注释的控制器,@RequestMapping注释用来映射一个请求,/表示首页由hello方法处理。Hello方法接收一个org.springframework.ui.Model类型的参数,本例在model中添加了一个名为message的字符串,该对象可以在返回的视图当中通过request对象获取。最后返回hello作为视图名称。