SpringMVC经典系列-06讲解SpringMVC核心注解---【LinusZhu】

来源:互联网 发布:centos 7.0 64位下载 编辑:程序博客网 时间:2024/04/30 13:44

      注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linuszhu@163.com,敬请朋友们斧正,谢谢。

      在实际的项目开发中,SpringMVC常用的核心注解如下:

1、@Controller

      控制层注解,通过@controller标注即可将class定义为一个controller为使spring能找到定义为controllerbean需要在springmvc-servlet.xml配置文件中增加如下定义

<!-- 如下是对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->

<context:component-scan base-package="com.spring"/>

      实际上,使用@Component同样可以起到@Controller同样的作用

      SpringMVC与Struts1一样,SpringMVC的ControllerSingleton的,这就意味着会被多个请求线程共享,因此我们将控制器类设计成无状态类。

2、@Service

      业务逻辑层,就是我们的service或者manager层,可以标注业务逻辑层。 

3、@Repository

      数据持久层注解,就是我们常说的DAO层,标注Dao层。

注意:以上3个注解都可以使用@Component(组件)替代,它可以在你确定不了具体是哪一层的时候使用。

4、@Resource

      用于注入功能的注解,可以从容器中得到你注入过的类的对象。

5@RequestMapping

      如果在类前面定义,则将url和类绑定,如果在方法前面定义,则将url和类的方法绑定,如下所示:

package com.spring.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import com.sxt.service.UserService;

@Controller

//绑定类

@RequestMapping("/user.do")

public class UserController  {

 

@Resource

private UserService userService;

    //绑定方法

 @RequestMapping(params="method=reg"

public String reg(String uname) {

System.out.println("HelloController.handleRequest()");

userService.add(uname); 

return "index";

}

public UserService getUserService() {

return userService;

}

public void setUserService(UserService userService) {

this.userService = userService;

}

}

6@RequestParam

    用于将指定的请求参数付给方法中形参,示例代码如下:

@RequestMapping(params="method=reg5")

public String reg5(@RequestParam("name")String uname,ModelMap map) { 

System.out.println("Controller.reg5()");

System.out.println(uname); 

return "index";

}

这样,就会将name参数的值付给形参uname,如果请求参数名称和形参名称保持一致,则不需要这样赋值。

7@SessionAttributes

    将SpringMVCModelMap中指定的属性放到session去,示例代码如下:

@Controller

@RequestMapping("/user.do")

//ModelMap中属性名字为ua的再放入session

@SessionAttributes({"u","a"})   

public class UserController  {

@RequestMapping(params="method=reg4")

public String reg4(ModelMap map) {  System.out.println("Controller.reg4()");

        //u放入ModelMap中去,ModelMap的作用域和request作用域相同

map.addAttribute("u","LinusZhu"); 

       map.addAttribute("a","LinusZhu1"); 

return "index";

}

}

页面中取值使用EL表达式如下: 

 <body>

   <h1>${requestScope.u}</h1>

   <h1>${sessionScope.a}</h1>

  </body>

8@ModelAttribute

    这个注解可以跟@SessionAttributes配合在一起用,可以将ModelMap中属性的值通过该注解自动赋给指定变量。

示例代码如下:

package com.spring.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.SessionAttributes;

@Controller

@RequestMapping("/user.do")

@SessionAttributes({"u"})  

public class UserController  {

@RequestMapping(params="method=reg4")

public String reg4(ModelMap map) {

System.out.println("Controller.reg4()");

map.addAttribute("u","LinusZhu");

return "index";

}

@RequestMapping(params="method=reg5")

//将属性u的值赋给形参uname

public String reg5(@ModelAttribute("u") String uname,ModelMap map) { 

System.out.println("Controller.reg5()");

System.out.println(uname); 

return "index";

}

}

测试:先调用reg4方法,再调用reg5方法。我们发现控制台打印出来:LinusZhu

0 0