一、简介基于 springboot 平台开发的项目数不胜数,与常规的基于spring开发的项目最大的不同之处,springboot 里面提供了大量的注解用于快速开发,而且非常简单,基本可以做到开箱即用!
那 springboot 为开发者提供了多少注解呢?我们该如何使用?
针对此问题,小编特意对其进行了一番整理,内容如下,个人感觉还是比较清晰的,今天我们就一起来整一整每个注解的含义和用法,以免踩坑!
二、注解总结2.1、springmvc 相关注解@controller通常用于修饰controller层的组件,由控制器负责将用户发来的url请求转发到对应的服务接口,通常还需要配合注解@requestmapping使用。
@requestmapping提供路由信息,负责url到controller中具体函数的映射,当用于方法上时,可以指定请求协议,比如get、post、put、delete等等。
@requestbody表示请求体的content-type必须为application/json格式的数据,接收到数据之后会自动将数据绑定到java对象上去
@responsebody表示该方法的返回结果直接写入http response body中,返回数据的格式为application/json
比如,请求参数为json格式,返回参数也为json格式,示例代码如下:
/** * 登录服务 */@controller@requestmapping(api)public class logincontroller { /** * 登录请求,post请求协议,请求参数数据格式为json * @param request */ @requestmapping(value = login, method = requestmethod.post) @responsebody public responseentity login(@requestbody userlogindto request){ //...业务处理 return new responseentity(httpstatus.ok); }}@restcontroller和@controller一样,用于标注控制层组件,不同的地方在于:它是@responsebody和@controller的合集,也就是说,在当@restcontroller用在类上时,表示当前类里面所有对外暴露的接口方法,返回数据的格式都为application/json,示范代码如下:
@restcontroller@requestmapping(api)public class logincontroller { /** * 登录请求,post请求协议,请求参数数据格式为json * @param request */ @requestmapping(value = login, method = requestmethod.post) public responseentity login(@requestbody userlogindto request){ //...业务处理 return new responseentity(httpstatus.ok); }}@requestparam用于接收请求参数为表单类型的数据,通常用在方法的参数前面,示范代码如下:
/** * 登录请求,post请求协议,请求参数数据格式为表单 */@requestmapping(value = login, method = requestmethod.post)@responsebodypublic responseentity login(@requestparam(value = username,required = true) string username, @requestparam(value = userpwd,required = true) string userpwd){ //...业务处理 return new responseentity(httpstatus.ok);}@pathvariable用于获取请求路径中的参数,通常用于restful风格的api上,示范代码如下:
/** * restful风格的参数请求 * @param id */@requestmapping(value = queryproduct/{id}, method = requestmethod.post)@responsebodypublic responseentity queryproduct(@pathvariable(id) string id){ //...业务处理 return new responseentity(httpstatus.ok);}@getmapping除了@requestmapping可以指定请求方式之外,还有一些其他的注解,可以用于标注接口路径请求,比如getmapping用在方法上时,表示只支持get请求方法,等价于@requestmapping(value=/get,method=requestmethod.get)
@getmapping(get)public responseentity get(){ return new responseentity(httpstatus.ok);}@postmapping用在方法上,表示只支持post方式的请求。
@postmapping(post)public responseentity post(){ return new responseentity(httpstatus.ok);}@putmapping用在方法上,表示只支持put方式的请求,通常表示更新某些资源的意思
@putmapping(put)public responseentity put(){ return new responseentity(httpstatus.ok);}@deletemapping用在方法上,表示只支持delete方式的请求,通常表示删除某些资源的意思
@deletemapping(delete)public responseentity delete(){ return new responseentity(httpstatus.ok);}2.2、bean 相关注解@service通常用于修饰service层的组件,声明一个对象,会将类对象实例化并注入到bean容器里面
@servicepublic class deptservice { //具体的方法}@component泛指组件,当组件不好归类的时候,可以使用这个注解进行标注,功能类似于于@service
@componentpublic class deptservice { //具体的方法}@repository通常用于修饰dao层的组件,
@repository注解属于spring里面最先引入的一批注解,它用于将数据访问层 (dao层 ) 的类标识为spring bean,具体只需将该注解标注在 dao类上即可,示例代码如下:
@repositorypublic interface rolerepository extends jparepository { //具体的方法}为什么现在使用的很少呢?
主要是因为当我们配置服务启动自动扫描dao层包时,spring会自动帮我们创建一个实现类,然后注入到bean容器里面。当某些类无法被扫描到时,我们可以显式的在数据持久类上标注@repository注解,spring会自动帮我们声明对象。
@bean相当于 xml 中配置 bean,意思是产生一个 bean 对象,并交给spring管理,示例代码如下:
@configurationpublic class appconfig { //相当于 xml 中配置 bean @bean public uploader initfileuploader() { return new fileuploader(); }}@autowired自动导入依赖的bean对象,默认时按照bytype方式导入对象,而且导入的对象必须存在,当需要导入的对象并不存在时,我们可以通过配置required = false来关闭强制验证。
@autowiredprivate deptservice deptservice;@resource也是自动导入依赖的bean对象, 由jdk提供 ,默认是按照byname方式导入依赖的对象;而@autowired默认时按照bytype方式导入对象,当然@resource还可以配置成通过bytype方式导入对象。
/** * 通过名称导入(默认通过名称导入依赖对象) */@resource(name = deptservice)private deptservice deptservice;/** * 通过类型导入 */@resource(type = rolerepository.class)private deptservice deptservice;@qualifier当有多个同一类型的bean时,使用@autowired导入会报错,提示当前对象并不是唯一,spring不知道导入哪个依赖,这个时候,我们可以使用@qualifier进行更细粒度的控制,选择其中一个候选者,一般于@autowired搭配使用,示例如下:
@autowired@qualifier(deptservice)private deptservice deptservice;@scope用于生命一个spring bean的作用域,作用的范围一共有以下几种:
singleton:唯一 bean 实例,spring 中的 bean 默认都是单例的。prototype:每次请求都会创建一个新的 bean 实例,对象多例。request:每一次 http 请求都会产生一个新的 bean,该 bean 仅在当前 http request 内有效。session:每一次 http 请求都会产生一个新的 bean,该 bean 仅在当前 http session 内有效。/** * 单例对象 */@restcontroller@scope(singleton)public class hellocontroller {}
稳压二极管伏安特性及曲线
9月15日|泰克云上大讲堂—车载传感器MIPI D-PHY信号分析
2022年全球mcu厂商排名情况分析
采用INA102构成人体生物电信号前置放大电路
兼容SPICE的运算放大器宏模型缩短仿真时间
SpringBoot常用注解及使用方法1
荣耀中国市场销售目标超额完成,线下销量已经超过线上
6N3+LM4780功放制作教程
AMD未来产品路线:Zen 2/3推进 7nm产品已在研发中
Littelfuse首款碳化硅MOSFET可在电力电子应用中实现超高速切换
梅赛德斯-奔驰使用 NVIDIA Omniverse、MB.OS 和生成式 AI 打造用于下一代平台的数字化生产系统
试驾Segway平衡轮椅撞墙,公司表示会增加安全带
什么是逆变电源 逆变电源的优点介绍 逆变电源的作用
联想拯救者Y9000X 2021将于11月30日发布
FMC子卡设计原理图:FMCJ456-基于JESD204B的2路3GspsAD 2路3Gsps DA FMC子卡
基于AEMB微处理器构建SoC系统验证平台
lm567芯片资料数据手册(lm567管脚图_作用_工作原理_应用电路)
【节能学院】浅谈电弧光保护装置在电网中的应用
基于ARM处理器和CPLD技术实现智能移动机器人系统设计
社区防控是疫情防控的基础环节 安防技术无处不在