SpringBoot | 第六章:常用注解介绍及简单使用
前言
之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于springboot本身是基于spring和springmvc等各类spring家族的一个解决方案,可快速进行集合。故相关知识点其实大部分都是基于spring或者springmvc既有的知识点的。本章节,主要讲解的是关于web开发及springboot独有的一些常用注解进行说明。
常用注解
@springbootapplication
前几章,在系统启动类里面,都加入了此启动注解,此注解是个组合注解,包括了@springbootconfiguration、@enableautoconfiguration和@componentscan注解。
-
@springbootconfiguration 继承至@configuration,对于熟悉spring的开发者而言,此标注当前类是配置类,并会将当前类内声明的一个或多个以@bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
-
@enableautoconfiguration 这个注解就是springboot能自动进行配置的魔法所在了。主要是通过此注解,能所有符合自动配置条件的bean的定义加载到spring容器中,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置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值,才能让该方法处理请求。
常用的基本上就value和method了。其简化注解有
@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时,被此注解的方法会执行两次,因为异步请求时,是挂起另一个线程去重新执行,对于配置了拦截器而已,它们的执行顺序为
1
prehandle ---->afterconcurrenthandlingstarted ----> controller---->prehandler----> posthandler ----> aftercompletion
拦截器的相关知识点会在下章进行说明,这里只是特殊说明下。解决方案的话可简单根据dispatchertype类型进行判断,异步时对应类型为:async,第一次请求正常为:request。
总结
本章节主要是阐述了在web开发时一些常用的注解,但比如一些像@autowired、@resource、@qualifier等在此就不列举了,这些都比较简单。对于开发者而言这些基本上都了解。
如果你现在在java这条路上挣扎,也想在it行业拿高薪,可以参加我们的训练营课程,选择最适合自己的课程学习,技术大牛亲授,7个月后,进入名企拿高薪。我们的课程内容有:java工程化、高性能及分布式、高性能、高架构、性能调优、spring,mybatis,netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来,q群号为:835638062
注:加群要求
1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。
3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。
4、觉得自己很牛b,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。
5.阿里java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!