第六章:SpringBoot2.3.0 @ConfigurationProperties注解与JavaBean属性绑定

一)@ConfigurationProperties简介

含义:该属性使强类型的Bean可以管理和验证应用程序的配置。可以说是@Value("${property}")注释的替代方法

@Value("${property}")的缺点:当配置非常多时,如果引用的地方也非常多,需要在很多地方通过@Value注入属性。会造成代码重复和后期维护麻烦。因为@Value属于动态获取值,JavaBean属性不能用static修饰符修饰。

 

二)JavaBean基础属性绑定

application.yml配置如下:

server:
  port: 9000

my:
  bean:
    id: 1
    name: ouyangjun

 

application.properties配置如下:

server.port=9000

my.bean.id=1
my.bean.name=ouyangjun

 

MyBeanProperties.java内容如下:

package com.oysept.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Component: 将该类注册成一个Bean
 */
@Component
@ConfigurationProperties(prefix = "my.bean")
public class MyBeanProperties {

    private Integer id;
    private String name;

    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}

    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
}

 

PropertyController.java内容如下:

package com.oysept.controller;

import com.oysept.config.MyBeanProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;

@RestController
public class PropertyController {

    // 根据类型注入使用
    @Autowired
    private MyBeanProperties myBean;

    // http://localhost:9000/test/property
    @RequestMapping(value="/test/property")
    public String property() {
        return "Time: "+ LocalDateTime.now() + ", id: " + myBean.getId() + ", name: " + myBean.getName();
    }
}

 

三)JavaBean List类型属性绑定

第一步:先创建一个Bean,并提供get、set方法

package com.oysept.bean;

public class MyBean {
    private Integer id;
    private String name;

    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}

    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
}

 

第二步:在配置文件中增加属性值

application.yml配置文件如下:该配置具有[index]的默认索引

server:
  port: 9000

mys:
  beans:
    list:
      - id: 666
        name: oysept
      - id: 999
        name: ouyangjun

 

application.properties配置文件如下:

server.port=9000

mys.beans.list[0].id=666
mys.beans.list[0].name=oysept
mys.beans.list[1].id=999
mys.beans.list[1].name=ouyangjun

 

第三步MyListProperties.java内容如下:

注:JavaBean中的属性名需要和配置文件名称保持一致。

package com.oysept.config;

import com.oysept.bean.MyBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @Component: 将该类注册成一个Bean
 */
@Component
@ConfigurationProperties(prefix = "mys.beans")
public class MyListProperties {

    private List list = new ArrayList();

    public List getList() {return list;}
    public void setList(List list) {this.list = list;}
}

list效果图:

第六章:SpringBoot2.3.0 @ConfigurationProperties注解与JavaBean属性绑定_第1张图片

 

四)JavaBean Map类型属性绑定

第一步:先创建一个Bean,并提供get、set方法

package com.oysept.bean;

public class MyBean {
    private Integer id;
    private String name;

    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}

    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
}

 

第二步:在配置文件中增加属性值

application.yml配置文件如下:

server:
  port: 9000

maps:
  map:
    key1:
      id: 333
    key2:
      id: 888
      name: my map test

 

application.properties配置文件如下:

server.port=9000

maps.map.key1.id=333
maps.map.key2.id=888
maps.map.key2.name=my map test

 

第三步MyMapProperties.java内容如下:

package com.oysept.config;

import com.oysept.bean.MyBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * @Component: 将该类注册成一个Bean
 */
@Component
@ConfigurationProperties(prefix = "maps")
public class MyMapProperties {

    private Map map = new HashMap();

    public Map getMap() {return map;}
    public void setMap(Map map) {this.map = map;}
}

map效果图:

第六章:SpringBoot2.3.0 @ConfigurationProperties注解与JavaBean属性绑定_第2张图片

 

五)@ConfigurationProperties与@Value

宽松绑定:属性的命名语法

语法1、acme.my-project.person.first-name,建议在.properties和.yml文件中使用。

语法2、acme.myProject.person.firstName:标准驼峰式语法。

语法3、acme.my_project.person.first_name:下划线表示法,是在.properties和.yml文件中使用的另一种格式。

语法4:ACME_MYPROJECT_PERSON_FIRSTNAME:大写格式,使用系统环境变量时建议使用。

注:如果确实想使用@Value,建议您使用规范形式来引用属性名称(kebab-case仅使用小写字母)。

例如,@Value("{demo.item-price}")将会把demo.item-pricedemo.itemPriceapplication.properties配件文件查找。

 

识别二维码关注个人微信公众号

第六章:SpringBoot2.3.0 @ConfigurationProperties注解与JavaBean属性绑定_第3张图片

本章完结,待续,欢迎转载!
 
本文说明:该文章属于原创,如需转载,请标明文章转载来源!

你可能感兴趣的:(SpringBoot2.3.0)