38

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

 6 years ago
source link: http://www.importnew.com/29392.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

前言

之前几个章节,大部分都是算介绍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  ,来判断你的项目是否需要添加了 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值,才能让该方法处理请求。

常用的基本上就 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作为参数

jERBvii.png!web

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

FBvyumb.png!web

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

mEfeymN.png!web

@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 系列教程,如有雷同,请多多包涵了。本文是作者在电脑前一字一句敲的,每一步都是实践的。若文中有所错误之处,还望提出,谢谢。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK