SpringMVC 常用注解

1、@Controller

在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式:

(1)在SpringMVC 的配置文件中定义MyController 的bean 对象。

(2)在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。

< context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)

2、@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

RequestMapping注解有六个属性,下面我们把她分成三类进行说明(下面有相应示例)。

1、 value, method;

value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

method: 指定请求的method类型, GET、POST、PUT、DELETE等;

2、consumes,produces

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3、params,headers

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

3、@Resource和@Autowired

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

1、共同点

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2、不同点

(1)@Autowired

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。public class TestServiceImpl {

// 下面两种@Autowired只要使用一种即可

@Autowired

private UserDao userDao; // 用于字段上

@Autowired

public void setUserDao(UserDao userDao) { // 用于属性的方法上

this.userDao = userDao;

}

}

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:public class TestServiceImpl {

@Autowired

@Qualifier("userDao")

private UserDao userDao;

}

(2)@Resource

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。public class TestServiceImpl {

// 下面两种@Resource只要使用一种即可

@Resource(name="userDao")

private UserDao userDao; // 用于字段上

@Resource(name="userDao")

public void setUserDao(UserDao userDao) { // 用于属性的setter方法上

this.userDao = userDao;

}

}注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

@Resource装配顺序:

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

4、@ModelAttribute和 @SessionAttributes

代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

@SessionAttributes即将值放到session作用域中,写在class上面。

具体示例参见下面:使用 @ModelAttribute 和 @SessionAttributes 传递和保存数据

5、@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:@Controller

public class TestController {

@RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)

public String getLogin(@PathVariable("userId") String userId,

@PathVariable("roleId") String roleId){

System.out.println("User Id : " + userId);

System.out.println("Role Id : " + roleId);

return "hello";

}

@RequestMapping(value="/product/{productId}",method = RequestMethod.GET)

public String getProduct(@PathVariable("productId") String productId){

System.out.println("Product Id : " + productId);

return "hello";

}

@RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",

method = RequestMethod.GET)

public String getRegExp(@PathVariable("regexp1") String regexp1){

System.out.println("URI Part 1 : " + regexp1);

return "hello";

}

}

6、@requestParam

@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

7、@ResponseBody

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

8、@Component

相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。

9、@Repository

用于注解dao层,在daoImpl类上面注解。

推荐教程:《Java教程》

springmvc php,SpringMVC 常用注解相关推荐

  1. SpringMVC 4.0常用注解

    为什么80%的码农都做不了架构师?>>>    注解的出现终结了使用XML配置文件的年代,它让程序拥有更高的可读性,可配置性与灵活性.上一篇介绍的SpringMVC 2.5版本的注解 ...

  2. spring mvc学习(7):springmvc学习笔记(常用注解)

    1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如下特点: 不需要继承任何类, 也不需要实 ...

  3. SpringMVC之Controller常用注解功能全解析

    一.简介 在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model ...

  4. springMVC中的@ModelAttribute注解

    springMVC小总结 常用注解总结 以下内容是我个人对@ModelAttribute注解的见解,如有错误请批评指正!!! 例子中用到的代码:代码获取 @ModelAttribute注解 1.作用: ...

  5. SpringMVC的常用注解

    SpringMVC的常用注解 1.@Controller @Controller注解在类上,表明这个类是Spring MVC 作为Controller(控制器)的角色.这样就可以将其 声明为Sprin ...

  6. SpringMVC-学习笔记03【SpringMVC常用注解】

    Java后端 学习路线 笔记汇总表[黑马程序员] SpringMVC-学习笔记01[SpringMVC概述及入门案例][day01] SpringMVC-学习笔记02[参数绑定及自定义类型转换] Sp ...

  7. springmvc整合swagger 与 常用注解说明

    Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使 ...

  8. SpringMVC学习笔记(二)常用注解

    SpringMVC学习笔记(二)常用注解 1.RequestParam 作用: 把请求中指定名称的参数给控制器中的形参赋值. 属性: value:请求参数中的名称. required:请求参数中是否必 ...

  9. springmvc常用注解

    转载自   springmvc常用注解 第一部分 一.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请 ...

  10. springmvc常用注解与类型转换

    springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --><context:annotation- ...

最新文章

  1. tomcat修改默认web目录
  2. double free or corruption (fasttop)
  3. 笔记-高项案例题-2019年下-人力资源管理-管理者权力-马斯洛需求理论-冲突管理...
  4. centos7安装mysql,安装easy install、pip、scrapy等
  5. QT的QDomDocument类的使用
  6. leetcode 467. Unique Substrings in Wraparound String | 467. 环绕字符串中唯一的子字符串(动态规划)
  7. [html] 在网格布局中都有哪些概念呢?比如:网格线
  8. DEDE常见的错误(转)
  9. 与一线Linux嵌入式开发工程师的对话
  10. FastDFS原理介绍
  11. 合并两个有序链表js
  12. 16万大奖,名企offer,翼支付杯大数据建模大赛邀你来战!
  13. 未来计算机作文600字,未来的电脑作文600字(精选3篇)
  14. 新手拍短视频技术总结:真实 随性 用心
  15. 基于神经网络的文字识别,神经网络如何识别图像
  16. 2021河南高考成绩查询倒计时,距离2021年高考天数 2021高考倒计时
  17. linux添加windows字体文件夹里,如何把Windows下的字体添加到Linux中
  18. 【blender建模功能】06 多边形建形工具
  19. 无线突然断开无法连接服务器,为什么我的无线网突然就断了 随后怎么也连不上...
  20. 【Git从入门到精通】02-深入Git

热门文章

  1. python中列表的常用操作
  2. 阅读 嘀嗒嘀嗒 微信公共号
  3. ECMAScript 6:更好的 Unicode 支持
  4. PostgreSQL下安装pg_stat_statements
  5. 元器件在线分销的探索之路
  6. 国家网络安全事件应急预案,你需要知道哪些重点
  7. Spring-boot配置JedisShardInfo
  8. java 把文件转化为字节数组
  9. 35.NO module named zlib
  10. 5. vector 模板类型? 数据类型?