Spring Boot常用注解
注解速览
配置加载相关
| 注解名 | 作用范围 | 作用 |
|---|---|---|
| @SpringBootApplication | ||
| @Configuration | 类 | 表明该类是一个基于 Java 显式装配的 Spring 配置类 |
| @ComponentScan | 类 | 启用组件扫描,让 Spring 自动发现并注册组件类 |
| @EnableAutoConfiguration | ||
| @ContextConfiguration |
Bean 声明注解
| 注解名 | 作用范围 | 作用 |
|---|---|---|
| @Component | 类 | 表明该类是一个组件类,由 Spring 为该类创建 Bean |
| @Repository |
Bean 注入注解
| 注解名 | 作用范围 | 作用 |
|---|---|---|
| @Autowired | ||
| @Resource | ||
| @Inject | ||
| @Qualifier |
SpringMVC 注解
| 注解名 | 作用范围 | 作用 |
|---|---|---|
| @Controller | 类 | 表明该类是 SpringMVC 中 的控制层组件 |
| @RestController | 类 | 该类中方法直接将字符串作为Web响应返回 |
| @Service | 类 | 表明该类是 SpringMVC 中 的业务层组件 |
| @RequestMapping | 类、方法 | 将 Web 请求映射到对应路径的方法上进行处理。<br />类:该控制器中所有方法都会继承 value 属性指定的路径。<br />方法:映射的路径会继承标注在类上的路径。 |
| @RequestParam | ||
| @PathVariable | ||
| @RequestBody | ||
| @ResponseBody | ||
| @ControllerAdvice | 类 | 将类内部@ExceptionHandler、@InitBinder、@ModelAttribute标注的方法应用到所有@RequestMapping标注的方法上。 |
| @ModelAttribute | 方法、方法参数 | 方法:该方法会添加一个或多个属性到 Model 上。<br />参数:该方法的参数值由 Model 中取得。 |
MyBatis 注解
| 注解名 | 作用范围 | 作用 |
|---|---|---|
| @Param | 方法参数 | Mapper 方法传入多个参数时给参数指定别名 |
| @Select | 方法 | 标注方法执行该 SQL 语句 |
| @Insert | 方法 | 同上 |
| @Update | 方法 | 同上 |
| @Delete | 方法 | 同上 |
配置加载相关
-
@SpringBootApplication:SpringBoot的核心注解,开启了组件扫描和自动配置,实际上它是将@Configuration、@ComponentScan和@EnableAutoConfiguration三个注解组合在了一起。 -
@Configuration:表明该类是一个基于 Java 显式装配的 Spring 配置类。
<div></div> - <span id="@ComponentScan">
@ComponentScan</span>:启用组件扫描,让 Spring 自动发现并注册组件类( Web 控制器类及被@Component标注的其他组件类)。默认扫描与配置类相同的包。
@ComponentScan("com.test")或@ComponentScan(basePackages={"com.test", "com.dev"})设置需要扫描的包。 -
@EnableAutoConfiguration:开启 Spring Boot 的自动配置特性。 -
@ContextConfiguration(classes=TestConfig.class):表明该类需要在TestConfig类中加载配置
Bean 声明注解
-
@Component:组件类,由 Spring 为该类创建 Bean。 -
@Repository:数据访问层组件(DAO)
Bean 注入注解
-
@Autowired:Spring 提供的自动装配 Bean 的注解。默认按类型装配,默认情况要求依赖对象必须存在。
可应用在构造器、属性的 Setter ()及其他方法上,自动装配匹配的 Bean。
若要按名称装配,需结合@Qualifier("name")一起使用。 -
@Resource:JDK1.6支持的装配注解,默认按名称装配,名称可由name属性指定。
未指定name属性时,若注解写在字段上默认取字段名,若注解写在setter方法上默认取属性名,当没有与名称匹配的bean时再按类型进行装配;如果指定了name属性,只会按名称装配。 -
@Inject:Java 依赖注入规范的注解,作用近似@Autowired。 -
@Qualifier("name"):限定符,自动装配时指定要注入的 Bean 名称。
Bean 初始化及销毁
-
@Bean:表明该方法返回的对象会由 Spring 注册为一个 Bean。默认的 Bean 都是单例的。
@Bean("name")对生成的 Bean 命名。
@Bean(initMethod="init",destroyMethod="destory"):指定 Bean 的初始化和销毁方法,在构造函数执行后执行初始化方法,在 Bean 销毁前执行销毁方法。 -
@PostConstruct:表明在构造函数执行后执行被标注的方法。 -
@PreDestroy:表明在 Bean 销毁前执行被标注的方法。 -
@DependsOn:定义 Bean 初始化及销毁时的顺序。 -
@Primary:当自动装配有多个匹配的 Bean 时,被标注的 Bean 将作为首选,若无标注则抛出异常。 -
@Lazy(true):延迟初始化
Bean 条件化装配
-
@Profile("dev"):应用在类、方法级别上,表明在对应的 profile 文件处于激活状态时才会进行 Bean 装配。
通过设置spring.profiles.active和spring.profiles.default这两个属性来确定哪个 profile 文件处于激活状态。 -
@ActiveProfiles("dev"):指定运行测试时要激活的 profile 文件。
SpringMVC 注解
-
@Controller:表明该类是 SpringMVC 中 的控制层组件,是一个处理 HTTP 请求的控制器,该类中所有被@RequestMapping标注的方法都会用来处理对应URL的请求 -
@RestController:一种 Web Controller 注解,表明该类中方法直接将字符串作为Web响应返回,效果同@ResponseBody。 -
@Service:表明该类是 SpringMVC 中 的业务层组件 -
@RequestMapping:该注解将 Web 请求映射到对应路径的方法上进行处理,可被标注在类或方法上。@RequestMapping(value = "/code", method = POST)中,value属性指定方法所要处理的请求路径;method属性指定所处理的 HTTP 方法,method属性为空时,默认处理 GET 方法。标注在类时,表明该控制器中所有方法都会继承
value属性指定的路径。标注方法时,映射的路径会继承标注在类上的路径,将访问路径的 HTTP 请求交给被标注的方法处理。
-
@RequestParam("id"):标注在方法参数前,将请求中的变量绑定到方法参数上(参数形式:/query?id=123),该注解默认使用,可不配置。
若请求中无对应参数,可采用defaultValue属性设置默认值。 -
@PathVariable("id"):标注在方法参数前,通过在@RequestMapping路径中添加占位符{},从而将请求路径中的变量绑定到方法参数上(参数形式:/query/{id})。
若占位符名称与方法参数名相同,可去掉value属性:@RequestMapping(value = "/query/{id}", method = GET) public String queryById(@PathVariable int id) { // ... } -
@RequestBody:作用于方法参数,根据HTTP Request Header的content-Type的内容,将接收到的 Request 对象的 body 数据经过适当的HttpMessageConverter转换为 Java 类。 -
@ResponseBody:直接将字符串作为Web响应(Reponse Body)返回。根据HTTP Request Header的Accept的内容,将标注方法返回的对象经过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。(默认将对象转换为JSON字符串返回) -
@ControllerAdvice:标注在类上。将类内部
@ExceptionHandler、@InitBinder、@ModelAttribute标注的方法应用到所有@RequestMapping标注的方法上。该类中各个注解的行为:
-
@ModelAttribute:在@RequestMapping注解方法执行之前,把标注方法的返回值放入 Model 中 -
@InitBinder:在@RequestMapping注解方法执行之前,初始化数据绑定器 -
@ExceptionHandler:当@RequestMapping注解方法抛出UnauthenticatedException异常时执行标注方法
-
-
@ModelAttribute:可被标注在方法或方法参数上。标注在方法上:
表明该方法会添加一个或多个属性到 Model 上。在 Controller 接收到请求调用
@RequestMapping标注方法之前,会先调用当前 Controller 中全部的@ModelAttribute标注方法。当
@ModelAttribute标注在@RequestMapping标注方法上时,方法返回值将被解释为 Model 的一个属性,而非一个视图名。@ModelAttribute标注方法通常用来填充一些公共的属性或数据,如下拉列表的预设状态、宠物的类型,或是去取前端表单渲染所需的对象,如Account。标注方式:
-
通过方法返回值默认添加属性(未显示指定属性名时将设置默认值):
@ModelAttribute public Account addAccount(@RequestParam String number) { return accountManager.findAccount(number); } -
方法接收一个
Model对象,向其中添加属性:@ModelAttribute public void populateModel(@RequestParam String number, Model model) { model.addAttribute(accountManager.findAccount(number)); // add more ... }
标注在参数上:
表明该方法的参数值由 Model 中取得,若未取到则实例化该参数并添加到 Model 中,请求中所有名称匹配的数据都会绑定到该参数中。
以下面的代码为例:
@RequestMapping(path = "/accounts/{account}", method = RequestMethod.PUT) public String save(@ModelAttribute("account") Account account) { // ... }该方法中 Account 类型的实例可能来自于:
- 因为
@SessionAttributes标注的使用已经存在于 Model 中 - 在同个控制器中使用了
@ModelAttribute方法已经存在于 Model 中 - 由URI模板变量和类型转换中取得的
- 调用了自身的默认构造器被实例化出来的
URI模板变量和类型转换:
该例中,Model 属性的名称("account")与URI模板变量的名称相匹配。如果配置了将
String类型的账户值转换成Account类型实例的转换器Converter<String, Account>,就可以实现自动转换,不需要再额外写一个@ModelAttribute方法。数据绑定:
WebDataBinder类将与 Model 属性名称匹配的查询参数和表单字段等请求参数进行类型转换后绑定到对应的属性上。进行数据绑定时可能会出现一些错误,若想检查这些错误,可以在标注
@ModelAttribute的参数紧跟着声明一个BindingResult参数:@RequestMapping(path = "/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) { if (result.hasErrors()) { return "petForm"; } // ... } -