• SpringBoot-属性绑定和bean属性校验


    目录

    属性绑定

    自定义类属性绑定

    第三方bean属性匹配

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

    Bean属性校验


    属性绑定

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

    自定义类属性绑定

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

    属性绑定步骤:

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

    1. public class ServiceConfig {
    2. private int prot;
    3. private String ipAddress;
    4. private long timeOut;

    2.添加注解

    1. @Component
    2. @Data
    3. @ConfigurationProperties(prefix = "servers")
    4. public class ServiceConfig {
    5. private int prot;
    6. private String ipAddress;
    7. private long timeOut;

    注解说明

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

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

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

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

    3.配置文件设置数据

     4.测试:在boot引导类中

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

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

    第三方bean属性匹配

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

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

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

    1. @Bean
    2. @ConfigurationProperties(prefix = "datasource")
    3. public DruidDataSource dataSource(){
    4. DruidDataSource druid = new DruidDataSource();
    5. return druid;
    6. }

     yml文件中进行属性绑定

    1. datasource:
    2. username: root
    3. password: root
    4. driverClassName: com.mysql.cj.jdbc.Driver
    5. url: jdbc:mysql://localhost:3306/test

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

    1. @SpringBootApplication
    2. public class SpringBootDemo2Application {
    3. @Bean
    4. @ConfigurationProperties(prefix = "datasource")
    5. public DruidDataSource dataSource(){
    6. DruidDataSource druid = new DruidDataSource();
    7. return druid;
    8. }
    9. public static void main(String[] args) {
    10. ConfigurableApplicationContext context = SpringApplication.run(SpringBootDemo2Application.class, args);
    11. DruidDataSource bean = context.getBean(DruidDataSource.class);
    12. System.out.println(bean.getUsername());
    13. System.out.println(bean.getPassword());
    14. System.out.println(bean.getUrl());
    15. System.out.println(bean.getDriverClassName());
    16. }
    17. }

    测试结果:

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

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

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

    特点:匹配规则很宽松。

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

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

    需要设置的属性: 

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

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

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

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

    烤肉串模式:ip-address: 198.56.23.38

    值得注意的是:

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

    Bean属性校验

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

    "属性校验"使用步骤

    1.导入对应坐标

    1. <dependency>
    2. <groupId>javax.validationgroupId>
    3. <artifactId>validation-apiartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>org.hibernate.validatorgroupId>
    7. <artifactId>hibernate-validatorartifactId>
    8. dependency>

    坐标说明

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

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

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

     2.开启校验功能 

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

    1. @Data
    2. @ConfigurationProperties(prefix = "servers")
    3. @Validated
    4. public class ServiceConfig {
    5. }

    3.设置校验规则

    属性上设置校验规则

    1. @Data
    2. @ConfigurationProperties(prefix = "servers")
    3. @Validated
    4. public class ServiceConfig {
    5. @Max(value = 8888,message = "最大值能超过8888")
    6. @Min(value = 200,message = "最小值不可小于200")
    7. private int prot;
    8. private String ipAddress;
    9. private long timeOut;
    10. }

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

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

     

     4.测试

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

     

  • 相关阅读:
    shiro认证绕过:CVE-2020-(1957,17523)
    生信教程:使用全基因组SNP数据进行ABBA-BABA分析
    【Python】语言学习
    Qt QJsonObject初始化列表的使用问题
    Win10系统固态硬盘开机慢的解决教程
    如何快速搭建网站(小白教程)(48小时内完成)
    MySQL:关于group by的一个小坑,以及sql_mode=only_full_group_by问题
    外贸公司保密协议 (2)
    LeetCode 522 最长特殊序列II[枚举 双指针] HERODING的LeetCode之路
    分类预测 | MATLAB实现SSA-FS-SVM麻雀算法同步优化特征选择结合支持向量机分类预测
  • 原文地址:https://blog.csdn.net/m0_60155232/article/details/127821797