SpringBoot属性绑定与bean属性校验实现方法详解

 更新时间:2022年11月15日 14:03:56   作者:CN丶1  
这篇文章主要介绍了SpringBoot属性绑定与bean属性校验实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

属性绑定

属性绑定:我们可以使用配置文件对类的属性进行赋值绑定。

自定义类属性绑定

我们自定义一个类,在此使用yml文件进行类属性的绑定。

属性绑定步骤:

1.创建一个类,设置字段。

public class ServiceConfig {
    private int prot;
    private String ipAddress;
    private long timeOut;

2.添加注解

@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServiceConfig {
    private int prot;
    private String ipAddress;
    private long timeOut;

注解说明:

@Component:将此类加入Spring容器。

@Data:使用lombok快速创建实体类。

@ConfigurationProperties:声明此类使用配置文件进行属性绑定,

并且设置使用配置文件中的哪个数据。

3.配置文件设置数据

4.测试:在boot引导类中

@SpringBootApplication
public class SpringBootDemo2Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringBootDemo2Application.class, args);
//获取自定义类
        ServiceConfig bean = context.getBean(ServiceConfig.class);
//打印获取的bean,查看是否成功绑定属性
        System.out.println(bean);
    }
}

测试结果: 发现打印出来的数据就是我们在yml中设置的数据

第三方bean属性匹配

说明:有时候我们的需求并不只是想要给我们自己的类进行属性绑定,还需要给第三方的bean进行属性绑定。

在此使用DruidDataSource作为第三方bean,为此bean进行属性绑定。

将Druid加入spring容器。(操作前提是导入了Druid坐标)

@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource(){
    DruidDataSource druid = new DruidDataSource();
    return druid;
}

yml文件中进行属性绑定

datasource:
  username: root
  password: root
  driverClassName: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/test

测试:打印第三方bean的配置数据到控制台看效果

@SpringBootApplication
public class SpringBootDemo2Application {
    @Bean
    @ConfigurationProperties(prefix = "datasource")
    public DruidDataSource dataSource(){
        DruidDataSource druid = new DruidDataSource();
        return druid;
    }
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringBootDemo2Application.class, args);
        DruidDataSource bean = context.getBean(DruidDataSource.class);
        System.out.println(bean.getUsername());
        System.out.println(bean.getPassword());
        System.out.println(bean.getUrl());
        System.out.println(bean.getDriverClassName());
    }
}

测试结果:

规则-松散绑定(宽松绑定)

宽松绑定是一种特性,说的是在配置文件中的绑定属性的数据时,属性名的书写规定很宽松。

松散绑定的规则:忽略标点符号,将所有字母转为小写

特点:匹配规则很宽松。

举例:属性绑定,在配置文件中设置多种属性名进行匹配。

我们配置类的ipAddress属性,查看在配置文件中书写属性的多种形式。

需要设置的属性:

配置文件中进行属性绑定:

说明:上面的方式,均可以对属性进行绑定,并未列出所有。

原因:忽略标点符号,将所有字母转为小写

如上方式有很多种,其中,官方主张”烤肉串模式”。

烤肉串模式:ip-address: 198.56.23.38

值得注意的是:

如上的宽松绑定规则仅仅限于:@ConfigurationProperties

Bean属性校验

对类的属性赋值时自定义规则进行校验。

"属性校验"使用步骤

1.导入对应坐标

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
</dependency>

坐标说明:

validation-api:是属性校验的接口坐标。

hibernate-validator:相当于是属性校验的接口实现类坐标。

两者关系就像jdbc和MySQL驱动相似,所以需要导入两个坐标。

2.开启校验功能

在需要启用校验功能的类上写注解:@Validated。

@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServiceConfig {
}

3.设置校验规则

在属性上设置校验规则

@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServiceConfig {
    @Max(value = 8888,message = "最大值能超过8888")
    @Min(value = 200,message = "最小值不可小于200")
    private int prot;
    private String ipAddress;
    private long timeOut;
}

说明:如上代码中,@Max和@Min就是设置的规则,其中有value和messge两个属性。

提供数据校验的规则有许多,如下(查看constraints包):

4.测试

我们使用yml文件进行属性绑定,进行属性校验,如果不符合条件则报错。

到此这篇关于SpringBoot属性绑定与bean属性校验实现方法详解的文章就介绍到这了,更多相关SpringBoot属性绑定内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 全面解析JPA 仓库repository中的findAll()方法

    全面解析JPA 仓库repository中的findAll()方法

    这篇文章主要介绍了全面解析JPA 仓库repository中的findAll()方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 关于泛型擦除问题的解决--Mybatis查询类型转换

    关于泛型擦除问题的解决--Mybatis查询类型转换

    这篇文章主要介绍了关于泛型擦除问题的解决--Mybatis查询类型转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java continue break制作简单聊天室程序

    Java continue break制作简单聊天室程序

    这篇文章主要为大家详细介绍了Java continue break制作简单聊天室程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • JAVA的Dubbo如何实现各种限流算法

    JAVA的Dubbo如何实现各种限流算法

    Dubbo是一种高性能的Java RPC框架,广泛应用于分布式服务架构中,在Dubbo中实现限流可以帮助服务在高并发场景下保持稳定性和可靠性,常见的限流算法包括固定窗口算法、滑动窗口算法、令牌桶算法和漏桶算法,在Dubbo中集成限流器可以通过实现自定义过滤器来实现
    2025-01-01
  • jstl之map,list访问遍历以及el表达式map取值的实现

    jstl之map,list访问遍历以及el表达式map取值的实现

    下面小编就为大家带来一篇jstl之map,list访问遍历以及el表达式map取值的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • java 四舍五入使java保留2位小数示例讲解

    java 四舍五入使java保留2位小数示例讲解

    这篇文章主要介绍了java四舍五入使java保留2位小数示例,大家参考使用
    2013-12-12
  • Java如何实现远程文件下载到本地目录

    Java如何实现远程文件下载到本地目录

    本文介绍了如何使用Java来实现远程文件的下载功能,主要通过HTTPS路径下载文件到本地目录,详细介绍了相关代码和测试步骤,并提供了实际案例供参考,本文旨在帮助需要实现文件下载功能的开发者快速掌握核心技术
    2024-10-10
  • Java中HashMap如何解决哈希冲突

    Java中HashMap如何解决哈希冲突

    本文主要介绍了Java中HashMap如何解决哈希冲突,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Java中怎样处理空指针异常

    Java中怎样处理空指针异常

    程序中的变量是 null,就意味着它没有引用指向或者说没有指针。这时,我们对这个变量进行任何操作,都必然会引发空指针异常,本文主要介绍了Java中怎样处理空指针异常,感兴趣的可以了解一下
    2022-05-05
  • Mybatis的sql语句执行异常后打印到日志问题

    Mybatis的sql语句执行异常后打印到日志问题

    文章介绍了一种Mybatis异常日志打印方案,主要通过Mybatis拦截器获取执行的sql语句,并利用ThreadLocal存储,以避免多线程下的sql语句覆盖问题,当异常发生时,从ThreadLocal中取出sql语句并打印到单独的日志文件中,方便数据恢复,该方案经过压力测试
    2024-10-10

最新评论