Spring Boot 项目中常见注解
@Autowired
自动导入依赖的 Bean。byType方式。把配置好的 Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CustomerController{
@Autowired
private CustomerService = customerService;
}
@Api--Swagger
该注解将一个Controller(Class)标注为一个 swagger 资源(API)。在默认情况下,Swagger-Core 只会扫描解析具有 @Api 注解的类,而会自动忽略其他类别资源(JAX-RS endpoints,Servlets等等)的注解。该注解包含以下几个重要属性:
- tags API分组标签。具有相同标签的API将会被归并在一组内展示。
- value 如果tags没有定义,value 将作为 Api 的 tags 使用
- description API 的详细描述,在 1.5.X 版本之后不再使用,但实际发现在2.0.0版本中仍然可以使用
@RestController
@RequestMapping("/api/v1/cps")
@Api(value = "CpsDeployBatch", description = "Cps批量回滚")
public class CpsBatchRollbackController {
...
}
@ApiOperation--Swagger
@ApiOperation(value = "从xxx下载包到", notes = "")
用在方法上,在指定的(路由)路径上,对一个操作或HTTP方法进行描述
- value 对操作的简单说明,长度为120个字母,60个汉字。
- notes 对操作的详细说明,会在接口的
Implementation Notes下显示接口的详细说明
@Bean
@Bean 是方法级(不是类)注释,是XML元素的直接模拟。意思是产生一个 Bean,并交给 Spring 管理
@ComponentScan
组件扫描,可自动发现和装配一些 Bean
@Component
可配合 CommandLineRunner 使用,在程序启动后执行一些基础任务。
Controller
@Controller处理 Http 请求,用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层)。@RestControllerSpring 框架4版本之后出来的注解,之前版本返回json数据需要@ResponseBody配合@Controller,项目中就是采用的该注解,没有采用上面的;
@Data
使用 Lombok 之后,将由其来自动帮你实现代码生成,比如一些 Getter/Setter 等方法。使用步骤如下:
- IDEA 安装插键
lombok; - pom 依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
</dependency>
- 在类上使用
@Data注解,那么该类你就可以省略一些变量的 Getter/Setter 方法的代码了;
lombok 插键使用:
@EnableAutoConfiguration
Spring Boot 自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的 classpath下存在 HSQLDB,并且你没有手动配置任何数据库连接 beans,那么我们将自动配置一个内存型(in-memory)数据库”。你可以将 @EnableAutoConfiguration 或者 @SpringBootApplication 注解添加到一个@Configuration 类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用 @EnableAutoConfiguration 注解的排除属性来禁用它们。
@override
@Override 是 Java5 的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记。
@Override 是伪代码,表示重写(当然不写也可以),不过写上有如下好处:
- 可以当注释用,方便阅读
- 编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错
参考:
@RequestMapping 配置 URL 映射关系
@RequestMapping 提供路由信息,负责 URL 到 Controller 中的具体函数的映射。
它是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
该注解有六个属性:
- params:指定request中必须包含某些参数值是,才让该方法处理。
- headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
- value:指定请求的实际地址,指定的地址可以是URI Template 模式,别名 path
- method:指定请求的method类型, GET、POST、PUT、DELETE等
- consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
- produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
在同一个注解中成对使用即可,比如示例代码中,value和path就是互为别名。但是要注意一点,@AliasFor标签有一些使用限制,但是这应该能想到的,比如要求互为别名的属性属性值类型,默认值,都是相同的,互为别名的注解必须成对出现,比如value属性添加了@AliasFor("path"),那么path属性就必须添加@AliasFor("value"),另外还有一点,互为别名的属性必须定义默认值。
@RequestMapping 的默认属性为 value,所以下面两种方法是等价的:
@RequestMapping(value="/example")
@RequestMapping("/example")
value属性还支持通配符模式:
?:匹配单个字符
*:匹配多个字符,单层路径匹配
**:匹配多层路径
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get映射到 特定的处理方法上。
@GetMapping(value = "/helloGet")
public String helloGet() {
return "helloGet";
}
@RequestMapping(value = "/helloGet1",method= RequestMethod.GET)
public String helloGet1() {
return "helloGet1";
}
@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。该注解将HTTP Post映射到 特定的处理方法上。
@PostMapping(value = "/helloPost")
public String helloPost() {
return "helloPost";
}
@RequestMapping(value = "/helloPost1",method= RequestMethod.POST)
public String helloPost1() {
return "helloPost1";
}
@PathVariable 获取url中的数据
@RequestMapping("/users/{username}")
public String userProfile(@PathVariable String username){
return "user:" + username;
}
- 这里
{username}就是我们定义的变量规则,username是变量的名字; - 需要注意的是,在默认情况下,变量中不可以包含 URL 的分隔符 /,例如路由不能匹配
/users/tianmaying/ricky,即使你认为tianmaying/ricky是一个存在的用户名; - 在默认的情况下,Spring 会对
@PathVariable注解的变量进行自动赋值,当然你也可以指定@PathVariable使用哪一个 URL 中的变量:
@RequestMapping("/users/{name}")
public String userProfile(@PathVariable("name") String username){
return "user:" + username;
}
- 定义多个 URL 变量
@PathVariable 注解的参数可以是一些基本的简单类型:int,long,Date,String 等,Spring 能根据 URL 变量的具体值以及函数参数的类型来进行转换,例如 /user/testUserName/intParam/5,会将 testUserName 的值赋给 username,而 5 赋值给 int 变量 num:
@RequestMapping("/user/{username}/intParam/{num}")
public String getUserInfo(@PathVariable String username , @PathVariable int num){
return "user: " + username + ";intParam:" + num;
}
@Qualifier
当有多个同一类型的 Bean 时,可以用 @Qualifier(“name”) 来指定。与 @Autowired 配合使用。@Qualifier 限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:
@Autowired
@Qualifier(value = “demoInfoService”)
private DemoInfoService demoInfoService;
@RequestParam 获取请求参数的值
@RequestMapping("/user/test")
public String getUserName1(@RequestParam("userName") String userName) {
return "userName = " + userName;
}
对应的 URL 会组成类似这样的:**/user/test?userName=michael
一旦我们在方法中定义了 @RequestParam 变量,如果访问的 URL 中不带有相应的参数,就会抛出异常——这是显然的,Spring尝试帮我们进行绑定,然而没有成功。
但有的时候,参数确实不一定永远都存在,这是我们可以通过定义 required 属性,当然,在参数不存在的情况下,可以给变量定义一个默认值:
@RequestMapping("/user/test")
public String getUserName1(@RequestParam(name="userName",required = false, defaultValue="admin") String userName) {
return "userName = " + userName;
}
用在方法的参数前面,来映射请求参数,在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法。这个注解属于 Spring。
- value,对应 url 提交的
?id=xx中的 id,参数名 - defaultValue,该参数的默认值,当 url 中 id 值没有传输时将使用这个参数进行赋值
- required,是否必须。默认为
true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
Ref:
@SpringBootApplication
申明让 Spring Boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Value
Spring @Value 注释用于为变量和方法参数指定默认值。我们可以使用 @Value 注释来读取 Spring 环境变量以及系统变量 。
注意:当要给静态变量注入值的时候,若是在静态变量声明之上直接添加 @Value() 注解是无效的
总结
声明 bean 的注解
@Component组件,没有明确的角色@Service在业务逻辑层使用(service 层)@Repository在数据访问层使用(dao 层)@Controller在展现层使用,控制器的声明(controller 层)
注入bean的注解
@Autowired:由Spring提供@Inject:由JSR-330提供@Resource:由JSR-250提供
基础知识
- Spring Bean是什么?
- Spring Boot常用注解(二) - 注入Bean的注解
- Spring Boot常用注解(一) - 声明Bean的注解
- 轻松理解 Java开发中的依赖注入(DI)和控制反转(IOC)
参考
Spring 注解
- 掘金-Spring之RequestBody的使用姿势小结
- 博客园-@requestBody注解的使用
- Java 必须掌握的 20+ 种 Spring 常用注解 归纳了哪些注解是声明 bean 的,哪些是注入 bean 的
- SpringBoot学习 ICode9 网站,一篇文章总结了 Spring Boot 的入门知识
- CSDN-Spring Boot各种注解详解
Swagger 注解
Spring Boot 项目中常见注解的更多相关文章
- Spring Boot项目中使用Swagger2
Swagger2是一款restful接口文档在线生成和在线接口调试工具,Swagger2在Swagger1.x版本的基础上做了些改进,下面是在一个Spring Boot项目中引入Swagger2的简要 ...
- 在Spring Boot项目中使用Spock框架
转载:https://www.jianshu.com/p/f1e354d382cd Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring B ...
- Spring Boot项目中使用Mockito
本文首发于个人网站:Spring Boot项目中使用Mockito Spring Boot可以和大部分流行的测试框架协同工作:通过Spring JUnit创建单元测试:生成测试数据初始化数据库用于测试 ...
- 在Spring Boot项目中使用Spock测试框架
本文首发于个人网站:在Spring Boot项目中使用Spock测试框架 Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring Boot项目 ...
- Spring Boot项目中如何定制拦截器
本文首发于个人网站:Spring Boot项目中如何定制拦截器 Servlet 过滤器属于Servlet API,和Spring关系不大.除了使用过滤器包装web请求,Spring MVC还提供Han ...
- Spring Boot项目中如何定制PropertyEditors
本文首发于个人网站:Spring Boot项目中如何定制PropertyEditors 在Spring Boot: 定制HTTP消息转换器一文中我们学习了如何配置消息转换器用于HTTP请求和响应数据, ...
- Spring Boot项目中如何定制servlet-filters
本文首发于个人网站:Spring Boot项目中如何定制servlet-filters 在实际的web应用程序中,经常需要在请求(request)外面增加包装用于:记录调用日志.排除有XSS威胁的字符 ...
- 你真的理解 Spring Boot 项目中的 parent 吗?
前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent> <groupId ...
- Spring Boot2 系列教程(三)理解 Spring Boot 项目中的 parent
前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent> <groupId ...
随机推荐
- AI案列 三条路
在生成点生成带有颜色的小球,小球走对应颜色的路 先做好三个小球,做成预制体 对应颜色的小球,除了自身颜色,其他颜色不要选 新建脚本: using System.Collections; using S ...
- DateTime.Compare(t1,t2)比较两个日期大小
DateTime.Compare(t1,t2)比较两个日期大小,排前面的小,排在后面的大,比如:2011-2-1就小于2012-3-2返回值小于零: t1 小于 t2. 返回值等于零 : t1 等于 ...
- JavaScript-switch-case-电话系统
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- CentOS中利用Docker安装Redis
CentOS中利用Docker安装Redis 1.拉取镜像 #docker pull redis:4.0.10 2.加载镜像 #docker run -p 6379:6379 --name test- ...
- SQL中的replace函数
REPLACE 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法 REPLACE ( 'string_expression1' , 'string_expression2 ...
- Unity shader学习之轮廓效果
将物体描一层边可以使游戏看起来具有卡通风格,一种简单的实现方法如下: 将物体渲染2次,即使用2个通道. 第一个通道将顶点沿法线(或中心点到顶点的方向)做一个偏移,即将模型扩大一点,并将颜色渲染成轮廓的 ...
- Some Useful Resources for the Future Usage
并发编程 http://ifeve.com/ 美国各州 http://114.xixik.com/usa-stats/ 美国各州邮编zip code -> https://www.douban. ...
- SV通过DPI调用C
Verilog与C之间进行程序交互,PLI(Programming Language Interface)经过了TF,ACC,VPI等模式. 使用PLI可以生成延时计算器,来连接和同步多个仿真器,并可 ...
- C++的类型转换
一.类型转换名称和语法 1.C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a 2.C++风格的类型转换提供了4种类型转换操作符来应对 ...
- sitecore系列教程之营销人员和技术人员如何策划与消费者的对话以提升体验?
“每次良好的交谈都要从良好的倾听开始.” - 未知 你是如何听取网站访问者的?你是在倾听还是只是回复? 拥有内容管理系统只是良好网站战略的一个要素.毕竟,内容必须是动态的,及时的和相关的. 当网站访问 ...