Spring Boot是越来越火了也主要是因为其注解给我们带来了莫大的帮助,使我们开发更加的快速便捷,所以,我们有必要简单的整理一下工作中常用的注解命令。
@SpringBootApplication
:作用在主类上,标识该应用为Spring Boot 应用,为应用赋能。
1 | @SpringBootApplication |
在spring-boot-autoconfigure
中,我们可以看到@SpringBootApplication
包含了@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
三个注解:
1 | @Target(ElementType.TYPE) |
@Configuration
:该注解用于标识该类为一个配置类,作用于类,相当于配置文件如:
1 | <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" default-autowire="byName"> |
@Bean
:该注解主要作用于方法,作用是将该方法放回的类实例注入到IOC容器中.默认取方法名为对象bean id,可以使用@Bean
注解设置属性值来指定bean id。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25@Configuration //标识为配置类
@EnableSwagger2
@EnableSwaggerBootstrapUi
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
@Bean("createRestApi") //指定bean id
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo( new ApiInfoBuilder()
//页面标题
.title("Demo Web Api文档")
//创建人
.contact(new Contact("eyiadmin", "https://springfox.github.io/springfox/", "eyiadmin@163.com"))
.version("1.0")
.description("Demo Web Api文档")
.build())
.select()
//API接口所在的包位置
.apis(RequestHandlerSelectors.basePackage("com.eyiadmin.demo.controller"))
.paths(PathSelectors.any())
.build();
}
}
@Scope
:该注解作用于类方法,用于指定bean的作用域,默认为单例:
- prototype:每次从IOC容器中取出对象都是重新创建Bean实例
- singleton:整个应用IOC容器中只有一个Bean实例
- request:同一个http请求创建一个Bean实例
- session:同一个Session会话创建一个Bean实例
@EnableAutoConfiguration
:允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径>下的包或者类来配置 Spring Bean。
如:当前类路径下有 Mybatis 这个 JAR 包,MybatisAutoConfiguration 注解就能根据相>关参数来配置 Mybatis 的各个 Spring Bean。
@SpringBootConfiguration
:这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或>者可利于 Spring Boot 后续的扩展。
@ComponentScan
:该注解用来代替配置文件中的 component-scan 配置,开启>组件扫描,相当于context:component-scan,如果扫描到有@Component @Controller @Service等这些注解的类,则把这些类注册为Bean
@Component
:该注解是将普通pojo实例化到spring容器中,相当于XML中的
@AutoWired
:该注解是将注入到的bean实例取出来,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
当加上(required=false)时,就算找不到bean也不报错。
@RestController
:该注解相当于@Controller
、@ResponseBody
两个注解的结合,我们可以再github查看源码https://github.com/spring-projects/spring-framework/blob/master/spring-web/src/main/java/org/springframework/web/bind/annotation/RestController.java:
1 | @Target(ElementType.TYPE) |
controller相关注解在https://github.com/spring-projects/spring-framework/tree/master/spring-web/src/main/java/org/springframework/web/bind/annotation能找到。
@Controller
:该注解主要作用于类上,标识该类为一个控制器,在对应的类上加上该注解,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。
@ResponseBody
:表示该方法的返回结果直接写入HTTP response body中一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
@RequestMapping
:该注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上,看源码:
1 | @Target({ElementType.TYPE, ElementType.METHOD}) |
使用时需要执行value
和method
参数,如:@RequestMapping(value = "hello/{name}", method= RequestMethod.GET)
.
@GetMapping
:该注解将HTTP GET请求映射到指定处理程序:
1 | @Target(ElementType.METHOD) |
我在源码中可以看到@RequestMapping(method = RequestMethod.GET)
这句代码,组合了@RequestMapping
注解并指定了GET
请求方式,一般使用@GetMapping
注解时,指定其value
属性即可,如:@GetMapping(value = "/name")
,等价于上面的@RequestMapping(value = "hello/{name}", method= RequestMethod.GET)
。除了@GetMapping
,还有@PostMapping
、@PutMapping
、@DeleteMapping
等,也是才用类似的方式,就不一一说明了。
@PathVariable
:该注解用于获取url中占位符的数据,如:
1 | @RequestMapping(value = "hello/{name}", method= RequestMethod.GET) |
@RequestParam
:该注解主要用于获取url中的请求参数,如:
1 | @RequestMapping(value = "baby", method= RequestMethod.GET) |
@RequestBody
:该注解用于接收HTTP的Body的内容并序列化为接受类型的对象,可接受复杂嵌套的内容,默认是使用JSON的格式。
还有
@RequestHeader
、@CookieValue
等,大家自己去查阅相关文档吧
@Value
:该注解主要作用于字段属性,用于属性取值:
- @value(“值”),如:
@value("农民工")
; - @Value(“#{}”) 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法,如:
@Value("#{12*2}")
; - @Value(“${xxxx}”)注解从配置文件读取值,如:
@Value("${datasource.url}")
;一般我们要取配置文件内容,还会配合
@ConfigurationProperties
一起使用,主要是用于指定配置文件中的指定 属性与该Bean绑定,如:@ConfigurationProperties("datasource")
@Repository
:该注解用于标注数据访问组件(DAO),作用于类,https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/java/org/springframework/stereotype/Repository.java:
1 | @Target({ElementType.TYPE}) |
@Service
:该注解用于标识用业务层组件,作用于类,源码如下:
1 | @Target({ElementType.TYPE}) |
value值作为Bean id,我们可以为Service指定Bean id,如:@Service("serviceBeanId")
@PropertySource
:该注解用于导入properties
配置文件,如:@PropertySource(value = {"classpath : path/application.properties"})
,多配置文件在{}
中意逗号(,)隔开。
@ImportResource
:该注解用于导入xml配置文件,支持相对路径和绝对路径,代码如下:
1 | @Retention(RetentionPolicy.RUNTIME) |
@ControllerAdvice
:该注解主要用于统一处理异常,作用于类,组合了@Component
注解,源码如下:
1 | @Target(ElementType.TYPE) |
用法如下:
1 | @ControllerAdvice |
@ExceptionHandler
:该注解声明异常处理方法,作用于方法上,例如:
1 | @ExceptionHandler(Exception.class) |
当触发Exception
会执行catchException方法。
目前能想到的大概就这些,后面有新发现再补充吧。