写点什么

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:211265

评论 1 条评论

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

网页视频下载教程(腾讯, B站, 优酷, 爱奇艺)

科技猫

经验分享 教程 视频处理 工具分享 网页视频下载

5月,腾讯最新职级技术要求曝光,Linux炸了。

linux大本营

c++ Linux 后台开发 架构师 服务器开发

全新 EMQ X Cloud:升配、降费、增效,助力企业智能化升级

DT极客

恍然大悟丨Java 中 RMI 的使用

Java架构师迁哥

jmeter命令行执行测试并对测试报表进行初步分析

行者AI

测试 Jmeter

七面阿里险幸上岸,入职就是40*16K。网友:Java 面经交出来

Java 程序员 架构 面试 计算机

【欢乐叫地主流程】需求分析/用例设计+游戏测试工作流程/测试计划

程序员阿沐

软件测试 需求分析 测试用例 游戏测试 测试计划

高德 Serverless 平台建设及实践

阿里巴巴云原生

Serverless 运维 云原生 监控 中间件

自己动手丰衣足食——自定义下拉框vue组件

空城机

vue.js 大前端 vue cli 5月日更 编写组件

lowcode 和 nocode 没有穿衣服

Xargin

lowcode nocode

使用docker compose快速部署前后端分离项目案例

皮特王

nginx Docker Vue Docker-compose

精选Hive高频面试题11道,附答案详细解析

五分钟学大数据

大数据 hive 5月日更

只会重装系统的运维,不是好运维

运维研习社

Linux 5月日更 系统修复

详解百度富媒体检索比对系统的关键技术

百度Geek说

大数据 后端 检索 #富媒体#

两年半,50W的offer,三本,普通前端如何打好自己的牌

月哥

面试

整天用对象,你知道Java中对象的内存布局吗?

码农参上

Java JVM 签约计划第二季

XML 文件解析

xcbeyond

XML配置 5月日更

SICP 习题2.6之丘奇数

程序员历小冰

函数式编程 SICP 5月日更

工商银行分布式服务 C10K 场景解决方案

阿里巴巴云原生

容器 微服务 云原生 监控 应用服务中间件

大数据实战:网站流量日志数据分析

大数据技术指南

大数据 5月日更

腾讯T6大牛体系化带你学习Java面向对象,网友:这详解,太清晰了

牛哄哄的java大师

Java 面向对象 面向对象编程

技术干货|7个 React 性能提升技巧

拍乐云Pano

React

Python OOP-5

若尘

oop Python编程 5月日更

腾讯云大神亲码“redis深度笔记”,从基础到源码,应有尽有

Java 编程 程序员 架构

Python监控打印机队列

IT蜗壳-Tango

IT蜗壳 IT蜗壳教学 5月日更

华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比

华为云开发者联盟

HBase 华为云 开源数据库 NoSQL数据库 数据库GaussDB(for Redis)

开发者必看,面试官心中的最佳数据库人才模型是什么样?

华为云开发者联盟

面试 开发者 华为云数据库 数据库人才

大部分两三年经验的程序员水平是怎样的?

Java架构师迁哥

一个朋友学会Java泛型后直接薪资翻倍!

北游学Java

Java 泛型

打破思维定式(六)

Changing Lin

5月日更

微服务的灾难

Xargin

架构 微服务 microservice

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