NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

springboot 之常用注解

  • 2020-02-11
  • 本文字数:3075 字

    阅读完需:约 10 分钟

springboot 之常用注解

在 spring boot 中,摒弃了 spring 以往项目中大量繁琐的配置,遵循约定大于配置的原则,通过自身默认配置,极大的降低了项目搭建的复杂度。同样在 spring boot 中,大量注解的使用,使得代码看起来更加简洁,提高开发的效率。这些注解不光包括 spring boot 自有,也有一些是继承自 spring 的。


本文中将 spring boot 项目中常用的一些核心注解归类总结,并结合实际使用的角度来解释其作用。


项目配置注解****




1、@SpringBootApplication 注解


查看源码可发现,@SpringBootApplication 是一个复合注解,包含了 @SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan 这三个注解。


这三个注解的作用分别为:


  • @SpringBootConfiguration:标注当前类是配置类,这个注解继承自 @Configuration。并会将当前类内声明的一个或多个以 @Bean 注解标记的方法的实例纳入到 srping 容器中,并且实例名就是方法名。

  • @EnableAutoConfiguration:是自动配置的注解,这个注解会根据我们添加的组件 jar 来完成一些默认配置,我们做微服时会添加 spring-boot-starter-web 这个组件 jar 的 pom 依赖,这样配置会默认配置 springmvc 和 tomcat。

  • @ComponentScan:扫描当前包及其子包下被 @Component,@Controller,@Service,@Repository 注解标记的类并纳入到 spring 容器中进行管理。等价于


1552403806170037530.png


大多数情况下,这 3 个注解会被同时使用,基于最佳实践,这三个注解就被做了包装,成为了 @SpringBootApplication 注解。


2、@ServletComponentScan:Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解 servlet ,拦截器,监听器的功能而无需其他配置,所以这次相中使用到了 filter 的实现,用到了这个注解。


3、@MapperScan:spring-boot 支持 mybatis 组件的一个注解,通过此注解指定 mybatis 接口类的路径,即可完成对 mybatis 接口的扫描。


它和 @mapper 注解是一样的作用,不同的地方是扫描入口不一样。@mapper 需要加在每一个 mapper 接口类上面。所以大多数情况下,都是在规划好工程目录之后,通过 @MapperScan 注解配置路径完成 mapper 接口的注入。


添加 mybatis 相应组建依赖之后。就可以使用该注解。


1552403826208060274.png


进一步查看 mybatis-spring-boot-starter 包,可以找到这里已经将 mybatis 做了包装。


这也是 spring 的一个理念,不重复造轮子,整合优秀的资源进入 spring 的体系中。


1552403835980056198.png


4、资源导入注解:@ImportResource @Import @PropertySource 这三个注解都是用来导入自定义的一些配置文件。


@ImportResource(locations={}) 导入其他 xml 配置文件,需要标准在主配置类上。


导入 property 的配置文件 @PropertySource 指定文件路径,这个相当于使用 spring 的


@import 注解是一个可以将普通类导入到 spring 容器中做管理


controller 层




1、@Controller 表明这个类是一个控制器类,和 @RequestMapping 来配合使用拦截请求,如果不在 method 中注明请求的方式,默认是拦截 get 和 post 请求。这样请求会完成后转向一个视图解析器。但是在大多微服务搭建的时候,前后端会做分离。所以请求后端只关注数据处理,后端返回 json 数据的话,需要配合 @ResponseBody 注解来完成。


这样一个只需要返回数据的接口就需要 3 个注解来完成,大多情况我们都是需要返回数据。也是基于最佳实践,所以将这三个注解进一步整合。


@RestController 是 @Controller 和 @ResponseBody 的结合,一个类被加上 @RestController 注解,数据接口中就不再需要添加 @ResponseBody。更加简洁。


同样的情况,@RequestMapping(value="",method= RequestMethod.GET ),我们都需要明确请求方式。这样的写法又会显得比较繁琐,于是乎就有了如下的几个注解。


普通风格Rest风格
@RequestMapping(value=“”,method = RequestMethod.GET)@GetMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.POST)@PostMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.PUT)@PutMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.DELETE)@DeleteMapping(value =“”)


这几个注解是 @RequestMapping(value="",method= RequestMethod.xxx )的最佳实践。为了代码的更加简洁。


2、@CrossOrigin:@CrossOrigin(origins = “”, maxAge = 1000) 这个注解主要是为了解决跨域访问的问题。这个注解可以为整个 controller 配置启用跨域,也可以在方法级别启用。


我们在项目中使用这个注解是为了解决微服在做定时任务调度编排的时候,会访问不同的 spider 节点而出现跨域问题。


3、@Autowired:这是个最熟悉的注解,是 spring 的自动装配,这个个注解可以用到构造器,变量域,方法,注解类型上。当我们需要从 bean 工厂中获取一个 bean 时,Spring 会自动为我们装配该 bean 中标记为 @Autowired 的元素。


4、@EnablCaching@EnableCaching: 这个注解是 spring framework 中的注解驱动的缓存管理功能。自 spring 版本 3.1 起加入了该注解。其作用相当于 spring 配置文件中的 cache manager 标签。


5、@PathVariable:路径变量注解,@RequestMapping 中用{}来定义 url 部分的变量名,如:


1552403886053010745.png


同样可以支持变量名加正则表达式的方式,变量名:[正则表达式]。


1552403897221010225.png




servcie 层注解




1、@Service:这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给 spring 容器。事务的切面也会配置在这一层。当让 这个注解不是一定要用。有个泛指组件的注解,当我们不能确定具体作用的时候 可以用泛指组件的注解托付给 spring 容器。


2、@Resource:@Resource 和 @Autowired 一样都可以用来装配 bean,都可以标注字段上,或者方法上。 @resource 注解不是 spring 提供的,是属于 J2EE 规范的注解。


两个之前的区别就是匹配方式上有点不同,@Resource 默认按照名称方式进行 bean 匹配,@Autowired 默认按照类型方式进行 bean 匹配。




持久层注解****




1、@Repository:@Repository 注解类作为 DAO 对象,管理操作数据库的对象。


总得来看,@Component, @Service, @Controller, @Repository 是 spring 注解,注解后可以被 spring 框架所扫描并注入到 spring 容器来进行管理


@Component 是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。


通过这些注解的分层管理,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。


所以我们在正常开发中,如果能用 @Service, @Controller, @Repository 其中一个标注这个类的定位的时候,就不要用 @Component 来标注。


2、@Transactional: 通过这个注解可以声明事务,可以添加在类上或者方法上。


在 spring boot 中 不用再单独配置事务管理,一般情况是我们会在 servcie 层添加了事务注解,即可开启事务。要注意的是,事务的开启只能在 public 方法上。并且主要事务切面的回滚条件。正常我们配置 rollbackfor exception 时 ,如果在方法里捕获了异常就会导致事务切面配置的失效。




其他相关注解****




  • @ControllerAdvice 和 @RestControllerAdvice:通常和 @ExceptionHandler、@InitBinder、@ModelAttribute 一起配合使用。

  • @ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理。

  • @RestControllerAdvice 是 @ControllerAdvice 和 @ResponseBody 的合集,可以将异常以 json 的格式返回数据。


如下面对数据异常返回的统一处理。


1552403914614056458.png


这里是对平时用到的一些注解做了归纳,及应用说明。还有其他更深的知识还需要在后续的用中继续学习。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/224


2020-02-11 20:21911

评论 1 条评论

发布
暂无评论
发现更多内容

Python 基础知识入门(三)

漫步桔田

热点面试题:为什么 0.1+ 0.2 != 0.3,如何让其相等?

控心つcrazy

JavaScript 面试 大前端 前端面试题 超全前端面试题

Python基础知识入门(四)

漫步桔田

开源面对面:浅谈数据库技术与人工智能的结合与实践

阿里云数据库开源

postgresql 阿里云 PolarDB for PostgreSQL ChatGPT 数据库技术

3DMAX中的7个基本建模小窍门

Finovy Cloud

blender 3ds Max Cinema 4D

设备掉线怎么办?数据分析让冰冷的设备“开口说话”——实践类

阿里云AIoT

阿里云 物联网 IoT

会声会影2023终极版下载安装教程

茶色酒

会声会影2023

活动报名:Tapdata Cloud V3 最新功能全解与核心应用场景演示

tapdata

ChatGPT模拟MySQL数据库 | 社区征文

NineData

MySQL 数据库 编程 技术栈 ChatGPT

Teradata在华落幕,国产化崛起,袋鼠云数栈会是更好的选择吗?

袋鼠云数栈

3款百里挑一的国产软件,逆天好用,装了就舍不得卸载

这我可不懂

思维导图 低代码 GIF

技术分享| anyRTC回声消除算法进化

anyRTC开发者

人工智能 音视频 回声消除 语音通话 视频通话

企业经常需要进行传输文件,大文件传输有哪些方法?

镭速

451个PyPI包通过安装Chrome扩展窃取加密信息

墨菲安全

供应链安全 投毒

ChatGPT对于普通人有什么机会和影响?

引迈信息

人工智能 AI AIGC ChatGPT

瓴羊Quick BI智能报表,让报表化复杂为简单!

巷子

不被同事骂的代码规范,程序员们值得拥有!

程序员小毕

Java 程序员 程序人生 架构师 代码

手把手教你如何快速检测设备异常——实践类

阿里云AIoT

阿里云 物联网 IoT

5分钟入门物联网大数据计算——实践类

阿里云AIoT

阿里云 物联网 IoT

公众号接入 chatGPT 教程(附源码)

攻城狮杰森

Python AI openai ChatGPT

吞吐量最高提升400%!百度智能云联合NVIDIA完成首批17个自动驾驶模型优化

科技热闻

Tapdata Connector 实用指南:实时数仓场景之数据实时同步至 ClickHouse

tapdata

数据库 实时数仓

父母、离别

毛广斌

生活

【2.17-2.24】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

Python基础知识入门(二)

漫步桔田

极光笔记 | 埋点体系建设与实施方法论

极光JIGUANG

精细化运营 数据埋点 用户运营

可观测性最佳实践|阿里云事件总线 EventBridge 最佳实践

观测云

可观测性 云服务 可观测 观测云 可观测性用观测云

技术科普|模糊测试背后的2个核心逻辑

云起无垠

模糊测试

DawnSql快速入门

陈飞

微服务 分布式数据库 实时数仓

LED屏逐点校正指南

Dylan

像素 LED显示屏 全彩LED显示屏

【kafka】常用命令汇总

石臻臻的杂货铺

kafka

springboot 之常用注解_行业深度_缑应奎_InfoQ精选文章