@ConfigurationProperties注解使用

1、基本简介

  • @ConfigurationProperties注解用于自动配置绑定,可以将application.properties配置中的值注入到bean对象上。

  • 该注解使用必须将对象注入到IOC容器中才有配置绑定的功能。

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface ConfigurationProperties {
	//1. 匹配的前缀
    @AliasFor("prefix")
    String value() default "";

	//2. 同上
    @AliasFor("value")
    String prefix() default "";

	//3. 忽略属性类型不匹配的字段
    boolean ignoreInvalidFields() default false;

	//4. 忽略类中未知的属性
    boolean ignoreUnknownFields() default true;
}

该注解可以使用在类上、方法上;会自动进行配置导入。



2、基本使用

  1. 先在application.properties中配置所需的参数

  2. 编写一个Car类、DeepSkyBlue类分别使用@ConfigurationProperties在类上配置和方法上配置。

  3. 测试@ConfigurationProperties各属性如何使用。

application.properties中配置如下

mycar.price=200w
mycar.brand=paramera

color.alpha=15

2.1 两种基本使用

标注在组件类上使用,一定要有组件注解!

@Data                       //get/set方法
@AllArgsConstructor         //全参构造
@NoArgsConstructor          //无参构造
@Component("car")           //组件注册, 必须有组件注册手段
@ConfigurationProperties(prefix = "mycar")
public class Car {
    private String brand;			//品牌
}

标注在方法上使用

@Configuration
public class MyConfig {

    @Bean("deepSkyBlue")
    @ConfigurationProperties(prefix = "color")
    public DeepSkyBlue deepSkyBlue(){
        return new DeepSkyBlue();
    }
}

在这里插入图片描述

2.2 字段不匹配
  • ignoreInvalidFields默认情况为true会自动忽略值类型不匹配的字段

  • 当ignoreInvalidFields=false手动关闭时如果值类型不匹配将会爆出异常。

@Data                       //get/set方法
@AllArgsConstructor         //全参构造
@NoArgsConstructor          //无参构造
@Component("car")           //组件注册, 必须有组件注册手段
@ConfigurationProperties(prefix = "mycar", ignoreInvalidFields = false)
public class Car {

    private int price;
    private String brand;
}

在这里插入图片描述

2.3 未知属性字段
  • 默认情况下ignoreUnknownFields属性是true,会忽略掉对象中未知的字段。

  • 手动关闭ignoreUnknownFields=false后当出现未知字段时会出现异常。

@Data                       //get/set方法
@AllArgsConstructor         //全参构造
@NoArgsConstructor          //无参构造
@Component("car")           //组件注册, 必须有组件注册手段
@ConfigurationProperties(prefix = "mycar", ignoreUnknownFields = true)
public class Car {

    private String price;			//修改为String类型
    private String brand;
    private String origin;			//忽略
}

在这里插入图片描述



3、@EnableConfigurationProperties注解

可以看到上面的配置绑定需要使用@Component组件注解进行注册才能进行绑定,如果是写好的第三方包呢?那么没有办法给第三方包加入的时候可以使用使用方法标记进行配置绑定或者@EnableConfigurationProperties注解进行自动注册

@Data                       //get/set方法
@AllArgsConstructor         //全参构造
@NoArgsConstructor          //无参构造
@ConfigurationProperties(prefix = "mycar")
public class Car {

    private String price;
    private String brand;

}
@Configuration
@EnableConfigurationProperties(value = {Car.class})		//自动配置绑定
public class MyConfig {

	@Bean("deepSkyBlue")
    @ConfigurationProperties(prefix = "color")
    public DeepSkyBlue deepSkyBlue(){
        return new DeepSkyBlue();
    }

}

在这里插入图片描述



4、补充

  • 根据目前所测试的只有绑定的属性字段与配置中所配置的属性名称一致(忽略大小写)才会进行自动的配置绑定

  • 字段名不匹配就不会进行自动配置

@Data                       //get/set方法
@AllArgsConstructor         //全参构造
@NoArgsConstructor          //无参构造
@Component("car")           //组件注册, 必须有组件注册手段
@ConfigurationProperties(prefix = "mycar")
public class Car {
    private String Price;
    private String pRice;
    private String CarPrice;
    private String Price_Car;
    private String Car_Price;

}

在这里插入图片描述

`@ConfigurationProperties` 是 Spring 框架中的一个注解,用于将外部配置文件(如 `application.properties` 或 `application.yml`)中的属性绑定到 Java 对象中。它通常用于集中管理配置项。 下面是一个简单的例子,展示如何使用 `@ConfigurationProperties` 注解来绑定配置。 ### 示例代码 假设我们有一个 `application.properties` 文件,内容如下: ```properties app.name=MyApp app.description=This is my application app.version=1.0.0 ``` 接下来,我们创建一个 Java 类来绑定这些属性: ```java import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "app") public class AppProperties { private String name; private String description; private String version; // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } @Override public String toString() { return "AppProperties{" + "name='" + name + '\'' + ", description='" + description + '\'' + ", version='" + version + '\'' + '}'; } } ``` 然后,在 Spring Boot 应用程序的主类上启用对 `@ConfigurationProperties` 的支持: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @SpringBootApplication @EnableConfigurationProperties(AppProperties.class) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 最后,你可以通过依赖注入的方式在其他组件中使用 `AppProperties`: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class AppService { private final AppProperties appProperties; @Autowired public AppService(AppProperties appProperties) { this.appProperties = appProperties; } public void printAppInfo() { System.out.println(appProperties.toString()); } } ``` ### 解释 1. **`@ConfigurationProperties(prefix = "app")`**: 这个注解指定了配置文件中以 `app` 为前缀的属性会被绑定到这个类的字段中。 2. **`@Component`**: 将 `AppProperties` 注解为一个 Spring Bean,这样它可以被 Spring 容器管理并自动注入。 3. **`@EnableConfigurationProperties(AppProperties.class)`**: 在主类上启用对 `AppProperties` 的支持,确保 Spring 能够正确处理 `@ConfigurationProperties` 注解。 4. **依赖注入**: 在 `AppService` 中通过构造函数注入 `AppProperties`,并使用它的值。 ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值