您的位置:首页 > 编程语言 > Java开发

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

2018-07-27 12:36 1171 查看

前言


之前几个章节,大部分都是算介绍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
时,被此注解的方法会执行
两次
,因为异步请求时,是挂起另一个线程去重新执行,对于配置了拦截器而已,它们的执行顺序为


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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: