Spring-Boot-Annotation

Spring Boot 一些注解的使用方法


JavaBean中的注释

@ConfigurationProperties 和 @Value

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

功能上

@ConfigurationProperties(prefix = "某个你指定的属性")会将application.properties或application.yml中的属性映射到当前Java Bean下。

1
2
3
4
5
6
7
8
9
10
@ConfigurationProperties(prefix = "john")
public class Person {

private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String, Object> map;
private List<Object> lists;
private Dog dog;

@Value("${某个你指定的key}"),会将application.properties或application.yml中的属性映射到下面的变量上。

1
2
3
4
5
6
7
8
9
@Component
public class Person {

@Value("${john.lastName}")
private String lastName;

private Integer age;
private Boolean boss;
private Date birth;

松散绑定

如果使用@ConfigurationProperties来配置的话,属性的key支持松散绑定,也就是下面3中写法等效

  • john.lastName
  • john.last-name
  • john.last_name
  • JOHN_LAST_NAME

如果要在配置文件里使用key = value的形式,请使用application.properties

SpEL

SpEL允许我们使用算式来赋予某一个值,但只有@Value能用

1
2
3
4
5
6
7
8
9
@Component
public class Person {

private String lastName;

@Value("#{11+2}")
private Integer age;
private Boolean boss;
private Date birth;

JSR303数据校验

要使用JSR303数据校验,我们先要使用@Validated开启这个功能,然后在变量上使用对应的校验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ConfigurationProperties(prefix = "john")
@Validated
public class Person {

@Email
private String lastName;

@NotNull
private Integer age;
private Boolean boss;
private Date birth;
private Map<String, Object> map;
private List<Object> lists;
private Dog dog;

复杂类型封装

例如:@Value不支持Map类型以及其他复杂类型

@PropertySource

当要使用application.properties和application.yml(全局配置文件)以外的profile时,我们需要使用@PropertySource注解来指定profile

1
@PropertySource(value = ("classpath:person.properties"))

Spring配置类中的注释

@ImportResource

导入Spring的配置文件,新建一个Spring配置文件时,Spring Boot不会自动识别和加载,需要用@ImportResource标注在一个配置类上使其生效

1
@ImportResource(locations = {"classpath:beans.xml"})

不过现在已经不建议使用spring配置文件了,建议使用全注解(使用配置类来代替配置文件)。

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">


<bean id="demoService" class="com.atguigu.springboot.service.DemoService"></bean>
</beans>

@Configuration和@Bean

使用@Configuration来指定一个类是配置类,用于代替配置文件

使用@Bean代替<bean><bean/>来添加bean

1
2
3
4
5
6
7
8
@Configuration
public class MyAppConfig {

@Bean
public DemoService demoService(){
return new DemoService();
}
}