今天看见项目里面有个方法不清楚是用来做什么的也没有啥注释,看到方法上个标识了@Deprecated 这个注解,一脸懵然后自己默默的去查了一下 ,原来是作废方法不建议使用的意思,使用的话方法名会出现中划线,当时不会影响方法的执行.

然后我又默默地总结了一下常用的spring注解的用法:

1、@Component

@Component
是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。

2、@Controller

@Controller对应表现层的Bean的注入

3、@ Service

@Service对应的是业务层Bean的注入

4、@ Repository

@Repository对应数据访问层Bean的注入

5、@RequestMapping

映射 Request 请求与处理器

(1)params属性

1

2

3

4

5

@RequestMapping (value= "testParams" , params={ "param1=value1" "param2" "!param3" })

    public String testParams() {

       System. out .println( "test Params..........." );

       return "testParams" ;

    }

  

用@RequestMapping 的params 属性指定了三个参数,这些参数都是针对请求参数而言的,它们分别表示参数param1 的值必须等于value1 ,参数param2 必须存在,值无所谓,参数param3 必须不存在,只有当请求/testParams.do 并且满足指定的三个参数条件的时候才能访问到该方法。所以当请求/testParams.do?param1=value1&param2=value2 的时候能够正确访问到该testParams 方法,当请求/testParams.do?param1=value1&param2=value2&param3=value3 的时候就不能够正常的访问到该方法,因为在@RequestMapping 的params 参数里面指定了参数param3 是不能存在的。

(2)method属性

1

2

3

4

@RequestMapping (value= "testMethod" , method={RequestMethod. GET , RequestMethod. DELETE })

    public String testMethod() {

       return "method" ;

    }

  

在上面的代码中就使用method 参数限制了以GET 或DELETE 方法请求/testMethod 的时候才能访问到该Controller 的testMethod 方法。

(3)headers属性

1

2

3

4

@RequestMapping (value= "testHeaders" , headers={ "host=localhost" "Accept" })

    public String testHeaders() {

       return "headers" ;

    }

headers 属性的用法和功能与params 属性相似。在上面的代码中当请求/testHeaders.do 的时候只有当请求头包含Accept 信息,且请求的host 为localhost 的时候才能正确的访问到testHeaders 方法。

@RequestMapping支持的方法参数类型

(1 )HttpServlet 对象,主要包括HttpServletRequest 、HttpServletResponse 和HttpSession 对象。 这些参数Spring 在调用处理器方法的时候会自动给它们赋值,所以当在处理器方法中需要使用到这些对象的时候,可以直接在方法上给定一个方法参数的申明,然后在方法体里面直接用就可以了。但是有一点需要注意的是在使用HttpSession 对象的时候,如果此时HttpSession 对象还没有建立起来的话就会有问题。

(2 )Spring 自己的WebRequest 对象。 使用该对象可以访问到存放在HttpServletRequest 和HttpSession 中的属性值。

(3 )InputStream 、OutputStream 、Reader 和Writer 。 InputStream 和Reader 是针对HttpServletRequest 而言的,可以从里面取数据;OutputStream 和Writer 是针对HttpServletResponse 而言的,可以往里面写数据。

(4 )使用@PathVariable 、@RequestParam 、@CookieValue 和@RequestHeader 标记的参数。

   (5 )使用@ModelAttribute 标记的参数。

   (6 )java.util.Map 、Spring 封装的Model 和ModelMap 。 这些都可以用来封装模型数据,用来给视图做展示。

(7 )实体类。 可以用来接收上传的参数。

(8 )Spring 封装的MultipartFile 。 用来接收上传文件的。

(9 )Spring 封装的Errors 和BindingResult 对象。 这两个对象参数必须紧接在需要验证的实体对象参数之后,它里面包含了实体对象的验证结果。

支持的返回类型

(1 )一个包含模型和视图的ModelAndView 对象。

(2 )一个模型对象,这主要包括Spring 封装好的Model 和ModelMap ,以及java.util.Map ,当没有视图返回的时候视图名称将由RequestToViewNameTranslator 来决定。

(3 )一个View 对象。这个时候如果在渲染视图的过程中模型的话就可以给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。

(4 )一个String 字符串。这往往代表的是一个视图名称。这个时候如果需要在渲染视图的过程中需要模型的话就可以给处理器方法一个模型参数,然后在方法体里面往模型中添加值就可以了。

(5 )返回值是void 。这种情况一般是我们直接把返回结果写到HttpServletResponse 中了,如果没有写的话,那么Spring 将会利用RequestToViewNameTranslator 来返回一个对应的视图名称。如果视图中需要模型的话,处理方法与返回字符串的情况相同。

(6 )如果处理器方法被注解@ResponseBody 标记的话,那么处理器方法的任何返回类型都会通过HttpMessageConverters 转换之后写到HttpServletResponse 中,而不会像上面的那些情况一样当做视图或者模型来处理。

(7 )除以上几种情况之外的其他任何返回类型都会被当做模型中的一个属性来处理,而返回的视图还是由RequestToViewNameTranslator 来决定,添加到模型中的属性名称可以在该方法上用@ModelAttribute(“attributeName”) 来定义,否则将使用返回类型的类名称的首字母小写形式来表示。使用@ModelAttribute 标记的方法会在@RequestMapping 标记的方法执行之前执行。

6.@PathVariable

当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。

@Deprecated 的功能相关推荐

  1. 应用JDK 9 @不推荐使用的增强功能

    我在博客文章JDK 9 @Deprecated Annotation Enhancements中讨论了针对@Deprecated注释的当前建议的JDK 9增强 功能 . 在本文中,我将更详细地介绍这些 ...

  2. JDK 9中不推荐使用Java的Observer和Observable

    在博客文章< 应用JDK 9 @Deprecated增强功能>中 ,我讨论了JDK 9中 @Deprecated批注中对forRemoval()和since()可选元素(方法)的添加 . ...

  3. JDK 9中已弃用Java的Observer和Observable

    在博客文章< 应用JDK 9 @Deprecated增强功能>中 ,我讨论了JDK 9中 @Deprecated批注中对forRemoval()和since()可选元素(方法)的添加 . ...

  4. Visionpro工具用途中文介绍

    提示:文章写完后,目录 目录 一.未分类 二.3D Tools 三.Calibration & Fixturing 四.Color 五.Deprecated 六.Geometry - Crea ...

  5. neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead

    1.现象描述: 以前在测试环境中使用过icehouse版本,记得当时查看网络列表是使用neutron net-list,最近两天在测试openstack ocata的时候发现好多之前的命令都不能正常使 ...

  6. Pandas 中的这些函数/属性将被 deprecated

    作者 | luanhz 来源丨小数志 导读 Pandas对于日常数据分析和处理来说是最常用的工具(没有之一),笔者之前也总结分享了很多相关用法和技巧. 与之不同,今天本文来介绍几个已经在函数文档中列入 ...

  7. python的功能模块_Python的功能模块[1] - struct - struct 在网络编程中的使用

    struct模块/ struct Module 在网络编程中,利用 socket 进行通信时,常常会用到 struct 模块,在网络通信中,大多数传递的数据以二进制流(binary data)存在.传 ...

  8. php实现项目的日志记录功能,tp5框架使用composer实现日志记录功能示例

    本文实例讲述了tp5框架使用composer实现日志记录功能.分享给大家供大家参考,具体如下: tp5实现日志记录 1.安装 psr/log composer require psr/log 它的作用 ...

  9. Spring Security 3.1 中功能强大的加密工具 PasswordEncoder

    去年发生的密码泄漏事件,我们也对密码加密做了重新研究.  在筛选加密方法的过程中,发现了Spring Security 3.1.0版本中提供了新的PasswordEncoder,它的加密方法非常给力! ...

  10. php功能与特性,PHP 6将实现的8个特性和功能

    其实这个是很早的消息了,我也曾在论坛讨论过.                                                                               ...

最新文章

  1. 使用OpenCV实现道路车辆计数
  2. AI 岗位年薪下降 8.9%,程序员越“老”越吃香,最新薪酬报告发布!
  3. 抽象数据类型Triplet的C语言实现
  4. 使用Flask-Mail发送邮件
  5. Linux——umask使用详解
  6. 从零开始用Python搭建超级简单的点击率预估模型
  7. 大整数乘法--leetcode Multiply Strings
  8. 【Elasticsearch】需要监控的 10 大 Elasticsearch 指标
  9. python字符串_四、Python的字符串
  10. 2010年最新网络推广方式总结
  11. 解决 vmware 死锁 :take ownership failed
  12. apache配置cgi出错_Apache配置实现cgi-阿里云开发者社区
  13. 比较大小教案计算机西瓜,比较大小小班教案
  14. 关于JS中的严格模式
  15. URAL K-based Numbers(1-3)
  16. sublime 插件(持续更新)
  17. 打开visio后屏幕会不停的抖动是怎么回事
  18. html使用css居中
  19. navicat报错 Access violation at address in module ‘navicat.exe‘
  20. 2019年9月Leetcode每日训练日志

热门文章

  1. DSP内核结构中的 D L S M
  2. Android 时区中英文显示对照
  3. PHP最好的培训学校-兄弟连IT教育
  4. 苹果手机的计算机怎么设置快捷键大全,教程方法;苹果电脑快捷键大全最常用的都在这里了电脑技巧-琪琪词资源网...
  5. 目标检测结果IOU不同取值的意义(0.5:0.95等)
  6. 链家租房数据抓取流程、分析
  7. 链家网页爬虫_爬虫-链家网租金数据
  8. java 中奖_java的if判断是否中奖了(21)
  9. 28岁以后,我再也没为工作拼过命
  10. JAVA学习(三)----常量和数据类型