SpringBoot常用注解
@SpringBootApplication
SpringBoot最最最核心的注解,包含了@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
三个注解。
@SpringBootConfiguration
允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
@EnableAutoConfiguration
启用 SpringBoot 的自动配置机制
@ComponentScan
扫描被@Component
,@Repository
,@Service
,@Controller
,@RestController
注解的 bean,注解默认会扫描该类所在的包下所有的类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package org.springframework.boot.autoconfigure; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { }
package org.springframework.boot; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration {
}
|
@Component,@Repository,@Service,@Controller,@RestController
@Component
:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Repository
:标注数据访问组件,即 DAO 组件。
@Service
:标注服务组件,即 Service 组件,主要涉及一些复杂的逻辑。
@Controller
:标注控制器组件,即 MVC 控制层组件,在前后端不分离的项目中,通常使用这个注解进行标注,返回视图,如果需要返回 JSON 数据,需要在方法上添加@ResponseBody
注解。
@RestController
:等价于@Controller+@ResponseBody
,标注控制器组件,即 MVC 控制层组件,在前后端分离的项目中,通常使用这个注解进行标注,返回 JSON 数据。
@Scope
声明 Spring Bean 的作用域
singleton
:单例模式,Spring 容器中只会存在一个实例,每次获取都是同一个实例。
prototype
:原型模式,每次获取都会创建一个新的实例。
request
:每次 HTTP 请求都会创建一个新的实例,该实例仅在当前 HTTP 请求内有效。
session
:每次 HTTP 请求都会创建一个新的实例,该实例仅在当前 HTTP Session 内有效。
1 2 3 4 5
| @Bean @Scope("singleton") public Person personSingleton() { return new Person(); }
|
@Value,@ConfigurationProperties
@Value
:注入普通类型的属性值,支持 SpEL 表达式。
@ConfigurationProperties
:注入配置文件中的属性值,支持 JSR303 数据校验,支持松散绑定。
1 2 3 4 5 6 7 8 9 10
| person: name: 张三 age: 18 boss: true birth: 2021/08/03 maps: {k1: v1, k2: v2} lists: [a, b, c] dog: name: 小狗 age: 2
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Component @ConfigurationProperties(prefix = "person") public class Person { @Value("${person.name}") private String name; @Value("#{11*2}") private Integer age; @Value("true") private Boolean boss; private Date birth; private Map<String, Object> maps; private List<Object> lists; private Dog dog;
public static class Dog { private String name; private Integer age; }
|
@ControllerAdvice,@ExceptionHandler,@RestControllerAdvice
@ControllerAdvice
:标注全局异常处理类,可以指定扫描范围。
@ExceptionHandler
:标注异常处理方法,可以指定处理的异常类型。
@RestControllerAdvice
:等价于@ControllerAdvice+@ResponseBody
。
1 2 3 4 5 6 7 8 9
| @ControllerAdvice @ResponseBody public class GlobalExceptionHandler {
@ExceptionHandler({ArithmeticException.class, NullPointerException.class}) public Result<String> handleArithmeticException(Exception e) { return Result.error("exception"); } }
|
1 2 3 4 5 6 7 8
| @RestControllerAdvice public class GlobalExceptionHandler {
@ExceptionHandler({ArithmeticException.class, NullPointerException.class}) public Result<String> handleArithmeticException(Exception e) { return Result.error("exception"); } }
|
@JsonIgnoreProperties
:标注在类上,指定忽略的属性。
@JsonIgnore
:标注在属性上,指定忽略的属性。
@JsonFormat
:标注在属性上,指定日期格式。
@JsonUnwrapped
:标注在属性上,指定属性不包含在外层。
@JSONField
:标注在属性上,指定属性别名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Data @NoArgsConstructor @AllArgsConstructor public class User { private String name; private Integer age; @JsonIgnoreProperties({"name"}) private String password; @JsonIgnore private String address; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; @JSONField(name = "phone") private String myPhone; @JsonUnwrapped private UserDetail userDetail; }
|
使用@JsonUnwrapped前
1 2 3 4 5 6 7 8 9 10 11 12
| { "name": "张三", "age": 18, "password": "123456", "address": "北京", "phone": "123456789", "createTime": "2021-08-03 11:00:00", "userDetail": { "phone": "123456789", "email": "" } }
|
使用@JsonUnwrapped后
1 2 3 4 5 6 7 8 9
| { "name": "张三", "age": 18, "password": "123456", "address": "北京", "createTime": "2021-08-03 11:00:00", "phone": "123456789", "email": "" }
|
@ActiveProfiles,@Test,@Transactional
@ActiveProfiles
:标注在测试类上,指定使用的配置文件。
@Test
:标注在测试方法上,指定测试方法。
@Transactional
:标注在测试方法上,被声明的测试方法的数据会回滚,避免污染测试数据。
1 2 3 4 5 6 7 8 9 10 11 12
| @SpringBootTest @ActiveProfiles("dev") public class PersonTest { @Autowired private Person person;
@Test @Transactional public void test() { System.out.println(person); } }
|
相关文章
MapStruct使用