前言

之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志
配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于SpringSpringMvc等各类spring家族的一个解决方案,可快速进行集合。故相关知识点其实大部分都是基于spring或者springmvc既有的知识点的。本章节,主要讲解的是关于web开发springboot独有的一些常用注解进行说明。

  • 常用注解
  • 总结
  • 最后
  • 老生常谈

常用注解

@SpringBootApplication

前几章,在系统启动类里面,都加入了此启动注解,此注解是个组合注解,包括了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan注解。

  • @SpringBootConfiguration 继承至@Configuration,对于熟悉spring的开发者而言,此标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。

  • @EnableAutoConfiguration 这个注解就是springboot能自动进行配置的魔法所在了。主要是通过此注解,能所有符合自动配置条件的bean的定义加载到spring容器中,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvctomcat,就会自动的帮你配置web项目中所需要的默认配置。具体的使用,会在后期自定义实现一个自动启动类时,会讲解到它的一些机制。此章节就不深入了,只需要它是这个用途即可,一般上也单独使用不要这个注解,但比如需要排除一些无需自动配置的类时,可利用exclude进行排除。

  • @ComponentScan 这个熟悉spring的开发者也应该熟悉,会扫描当前包及其子包下被@Component,@Controller,@Service,@Repository等注解标记的类并纳入到spring容器中进行管理。

@Controller 和 @RestController

@RestController 是Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。而@Controller是用来创建处理http请求的对象,一般结合@RequestMapping使用。

@RequestMapping

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

常用属性(摘抄至网络):

  • value, method;
    value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
    method: 指定请求的method类型, GET、POST、PUT、DELETE等;
  • consumes,produces;
    consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
    produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
  • params,headers;
    params: 指定request中必须包含某些参数值是,才让该方法处理。
    headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

常用的基本上就valuemethod了。
其简化注解有

@GetMapping 等同于 @RequestMapping(method = RequestMethod.GET)
@PostMapping 等同于 @RequestMapping(method = RequestMethod.POST)
@PutMapping 等同于 @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping 等同于 @RequestMapping(method = RequestMethod.DELETE)
@PatchMapping 等同于 @RequestMapping(method = RequestMethod.PATCH)

@RequestBody和@ResponseBody

  • @RequestBody注解允许request的参数在reqeust体中,常常结合前端POST请求,进行前后端交互。

  • @ResponseBody注解支持将的参数在reqeust体中,通常返回json格式给前端。

@PathVariable、@RequestParam、@RequestAttribute

  • @PathVariable用来接收参数,如/path/001,可接收001作为参数

  • @RequestParam 用来接收URL中的参数,如/param?id=001,可接收001作为参数

  • @RequestAttribute用于访问由过滤器或拦截器创建的、预先存在的请求属性,效果等同与request.getAttrbute().

@Component、@Service、@Repository

这三者都是申明一个单例的bean类并纳入spring容器中,后两者其实都是继承于@Component

  • @Component 最普通的组件,可以被注入到spring容器进行管理

  • @Repository 作用于持久层

  • @Service 作用于业务逻辑层

通常一些类无法确定是使用@Service还是@Component时,注解使用@Component,比如redis的配置类等

@ModelAttribute

主要是绑定请求参数到指定对象上。此注解可被用于方法、参数上。

  • 运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用;
  • 运用在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中;

由于现在都采用前后端分离开发,故此注解相对用的较少了,但对于一些在每次请求前需要进行一些额外操作时。使用此注解依然是个选择,比如进行统一的业务校验等,但使用此注解实现类似功能时需要注意,使用异步调用时,比如callable或者DeferredResult时,被此注解的方法会执行两次,因为异步请求时,是挂起另一个线程去重新执行,对于配置了拦截器而已,它们的执行顺序为

preHandle ---->afterConcurrentHandlingStarted ----> Controller---->preHandler----> postHandler ----> afterCompletion

拦截器的相关知识点会在下章进行说明,这里只是特殊说明下。解决方案的话可简单根据DispatcherType类型进行判断,异步时对应类型为:ASYNC,第一次请求正常为:REQUEST。

总结

本章节主要是阐述了在web开发时一些常用的注解,但比如一些像@autowired@resource@Qualifier等在此就不列举了,这些都比较简单。对于开发者而言这些基本上都了解。

最后

目前互联网上很多大佬都有springboot系列教程,如有雷同,请多多包涵了。本文是作者在电脑前一字一句敲的,每一步都是实践的。若文中有所错误之处,还望提出,谢谢。

老生常谈

  • 个人QQ:499452441
  • 微信公众号:lqdevOps

个人博客:http://blog.lqdev.cn

原文地址:https://blog.lqdev.cn/2018/07/16/springboot/chapter-six/

转载于:https://www.cnblogs.com/okong/p/springboot-six.html

SpringBoot | 第六章:常用注解介绍及简单使用相关推荐

  1. Helm模板常用语法介绍与简单应用场景

    Helm模板常用语法介绍与简单应用场景 文章目录 Helm模板常用语法介绍与简单应用场景 什么是Helm _help.tpl子模版 应用场景 预定义对象 关于变量 关键字及应用 函数 流程与控制 什么 ...

  2. sg-uap mysql_SG-UAP常用注解介绍

    注解基本介绍 Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以'@注解名'在代码中存在的,根据注解参数的个数,我们可 ...

  3. SpringBoot学习三:常用注解(配置相关)

    SpringBoot常用注解(配置相关) 1.yml语法 ★注意空格 yml中的写法 properties中的写法 2.@Value获取值和@ConfigurationProperties获取值比较 ...

  4. 《深度学习进阶 自然语言处理》第六章:LSTM介绍

    文章目录 6.1 RNN的问题 6.1.1 RNN的复习 6.1.2 梯度消失和梯度爆炸 6.1.4 梯度爆炸的对策 6.2 梯度消失和LSTM 6.2.1 LSTM的接口 6.2.2 LSTM层的结 ...

  5. springboot和springcloud及常用注解积累

    @SpringBootApplication是springboot启动类,包括三个注解(@ComponentScan && @Configuration && @Ena ...

  6. Lombok工具 : 常用注解介绍 (全)

    文章目录 介绍 引入Maven依赖 常用的注解 @NoArgsConstructor/@AllArgsConstructor @RequiredArgsConstructor @Getter/@Set ...

  7. python中常用的序列化模块_第六章 常用模块(5):python常用模块(序列化模块:pickle,json,shelve,xml)...

    6.3.7 序列化模块 (pickle,json,shelve,xml) 文件写入,数据传输时,我们都是以字符串形式写入的(因为字符串可以encode成bytes). 那其他类型(比如字典,列表等)想 ...

  8. SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/weixin_44102992/article/ details/107335702 前言 提到权限管理这块肯定很多人第一想到的 ...

  9. 第六章网络应用技术(比较简单)

    网络应用技术 一. 网络应用概述 网络应用 是直接面向计算机网络的用户,遵循相应的网络应用协议,为用户提供某个特定的网络服务或功能的一套完整的软件系统 1. 客户机/服务器模式 客户机/服务器模式 在 ...

最新文章

  1. 北京冬奥会“特许上新日”迎春节 将集中上市多款年味产品
  2. BZOJ3574 HNOI2014抄卡组(哈希)
  3. 在Linux执行命令报错”Arg list too long”的原因分析
  4. Depth-first Search深度优先搜索专题6
  5. 【刷算法】LeetCode- 两数之和 1
  6. oracle as sydba,Oracle的操作系统认证(/ as sydba 登录方式)
  7. Redis基础知识详解(非原创)
  8. 解密 TCP/IP!
  9. ajax 实时进度_【乐建工程宝】如何把控施工项目进度
  10. Vivado中的Incremental Compile增量编译技术详解
  11. 百度编辑器 ueditor .net开发
  12. [2019杭电多校第四场][hdu6614]AND Minimum Spanning Tree(贪心)
  13. sublime text3之修改注释颜色
  14. pbrt gamma
  15. AiHi+翼次元学院儿童自然感知实践“几米小甜田”+中韧开智“优慧码”| Wit++
  16. Cloudera Manager6.3.1+CDH6.3.2本地仓库方式搭建(超详细版)
  17. 2016网易春季校园招聘产品策划笔试
  18. 明略科技吴明辉:每一次新数据都会带来商业模式的迭代
  19. JSON树转换成线性列表(python)
  20. 线程池的好处,详解,单例(绝对好记)

热门文章

  1. java实现对properties类型文件的读写
  2. OpenFeign, Zuul, Gateway相互不兼容的问题总结
  3. [机器学习]TF-IDF是什么
  4. 交换机配置工具_Soce在FPGA上为任务关键型应用量身定制的IEEE 1588感知以太网交换机...
  5. 数学基础 —— 线性代数
  6. leetcode - 1191. K 次串联后最大子数组之和
  7. 【完整版-斯坦福-密码学】全13讲(流密码)【笔记】
  8. Matlab自定义函数的五种方法
  9. 深拷贝与浅拷贝的区别
  10. RocketMQ源码学习