配置属性校验

106 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第N天,点击查看活动详情

 自定义配置文件时,可以使用@Validated注解对注入的值进行一些简单的 校验,示例代码

@Validated
@Configuration
@ConfigurationProperties(prefix = "person")
public class Person {
@Email
private String mail;
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
}

@Email 注解会对mail字段的注入值进行检验,如果注入的不是一个合法的 邮件地址则会抛出异常。 其它常见注解:

@AssertFalse 校验false
@AssertTrue 校验true
@DecimalMax(value=,inclusive=) 小于等于value,inclusive=true,
是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull 检查Null
@Past 检查日期
@Pattern(regex=,flag=) 正则
@Size(min=, max=) 字符串,集合,map限制大小
@Validate 对po实体类进行校验
上述的这些注解位于javax.validation.constraints包下, SpringBoot 2.3.0
以后maven引用:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

注: 属性校验只适用于批量注解
@Value 与 @ConfigurationProperties
对比
@Value 和 @ConfigurationProperties 注解都能读取配置文件中的属性值
并绑定到 JavaBean 中,但两者存在以下不同。\

  1. 使用位置不同
    @ConfigurationProperties:标注在 JavaBean 的类名上;
    @Value:标注在 JavaBean 的属性上。\
  2. 功能不同
    @ConfigurationProperties:用于批量绑定配置文件中的配置;
    @Value:只能一个一个的指定需要绑定的配置。\
  3. 松散绑定支持不同
    @ConfigurationProperties:支持松散绑定(松散语法),例如实体类
    Person 中有一个属性为 firstName,那么配置文件中的属性名支持以下写
    法:
    person.firstName
    person.first-name
    person.first_name
    PERSON_FIRST_NAME
    @Vaule:不支持松散绑定。\
  4. SpEL 支持不同
    @ConfigurationProperties:不支持 SpEL 表达式;
    @Value:支持 SpEL 表达式。\
  5. 复杂类型封装
    @ConfigurationProperties:支持所有类型数据的封装,例如 Map、
    List、Set、以及对象等;
    @Value:支持基本数据类型的封装,例如字符串、布尔值、整数等类
    型, 对集合Map list set配置有要求
    6.属性校验
    @Value不支持属性校验
    @ConfigurationProperties 支持属性校验\
  6. 应用场景不同
    @Value 和 @ConfigurationProperties 两个注解之间,并没有明显的优劣
    之分,它们只是适合的应用场景不同而已。
    若只是获取配置文件中的某项值,则推荐使用 @Value 注解;
    若专门编写了一个 JavaBean 来和配置文件进行映射,则建议使用
    @ConfigurationProperties 注解。
    我们在选用时,根据实际应用场景选择合适的注解能达到事半功倍的效
    果。
    导入配置
    默认情况下,Spring Boot 中是不包含任何的 Spring 配置文件的,即使我
    们手动添加 Spring 配置文件到项目中,也不会被识别。
    Spring Boot提倡基于Java的配置。尽管你可以使用XML源,不过还是建议
    你使用@Configuration类作为主要配置源。通常定义了main方法的类也是
    使用@Configuration注解的一个很好的替补。
    使用 @ImportResource 注解加载 Spring 配置文件
    @ImportResource 导入 Spring 配置文

    在主启动类上使用 @ImportResource 注解可以导入一个或多个 Spring 配
    置文件,并使其中的内容生效。
    1、在resources下创建beans.xml文件,如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
xsi:schemaLocation="http://www.springframework.org/schema/
beans http://www.springframework.org/schema/beans/springbeans.xsd">
</beans>

2、创建业务测试类 接口 OrderService

public interface OrderService {
public void test();
}

public class OrderServiceImpl implements OrderService{
@Override
public void test() {
System.out.println("xml配置获取类的实例");
}
}

3、在beans.xml中增加配置

<bean id="orderService" class="com.by.OrderServiceImpl"/>


4、引入xml文件

@SpringBootApplication
@ImportResource(value = "classpath:beans.xml")


5、测试
注入OrderService