注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linuszhu@163.com,敬请朋友们斧正,谢谢。
在实际的项目开发中,SpringMVC常用的核心注解如下:
1、@Controller
控制层注解,通过@controller标注即可将class定义为一个controller类,为使spring能找到定义为controller的bean,需要在springmvc-servlet.xml配置文件中增加如下定义:
<!-- 如下是对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --> <context:component-scan base-package="com.spring"/> |
实际上,使用@Component同样可以起到@Controller同样的作用。
SpringMVC与Struts1一样,SpringMVC的Controller是Singleton的,这就意味着会被多个请求线程共享,因此我们将控制器类设计成无状态类。
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
将SpringMVC的ModelMap中指定的属性放到session中去,示例代码如下:
@Controller @RequestMapping("/user.do") //将ModelMap中属性名字为u、a的再放入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