注解ConfigurationProperties、EnableConfigurationProperties的用法

1 @ConfigurationProperties

@ConfigurationProperties主要作用就是将prefix属性指定的前缀配置项的值绑定到这个JavaBean上 ,通过指定的前缀,来绑定配置文件中的配置。这样的好处是将配置数据与JOPO进行转换,能够管理一个类别的所有配置信息,一次性加载,便于操作
在这里插入图片描述
由上图可知,@Target({ ElementType.TYPE, ElementType.METHOD }) ConfigurationProperties注解可用在类上和方法上(必须是配置类中的标注了@Bean注解的方法)。接下来我将用代码来演示@ConfigurationProperties的两种用途。演示项目的解构为maven项目,引入的相关依赖为


 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
 </parent>

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


 <dependency>
     <groupId>org.projectlombok</groupId>
     <artifactId>lombok</artifactId>
     <version>1.18.24</version>
 </dependency>

application.yml配置文件信息如下

userinfo:
  id: 1
  username: lyf
  password: xxxxxxx
  email: it-api@mail.xxxxx.com


userinfo1:
  id: 11
  username: lyf1
  password: xxxxxxx
  email: it-api@mail.xxxxx.com1
1.1 用在类上
/**
 * @Author lyf
 * @Date 2023/2/15 - 08:56
 * @Description
 **/
@Data
@Component("user1")
@ConfigurationProperties(prefix = "userinfo")
public class User {

    private int id ;
    private String username;
    private String password;
    private String email;
}

@ConfigurationProperties(prefix = “userinfo”) 意指将application.yml中前缀为userinfo的配置信息按照属性一一对应加载到User对象上

/**
 * @Author lyf
 * @Date 2023/2/15 - 09:20
 * @Description
 **/
@RestController
public class UserController {

    @Qualifier("user1")
    @Autowired
    private User user1;

    @GetMapping("/getUser1")
    public String getUser1(){
        return  user1.toString();
    }
}

启动项目后,请求localhost:8080/getUser1,成功将userinfo前缀中配置的信息输出
在这里插入图片描述

1.2 用在方法上
@Configuration
public class Demo1 {
    
    @Bean("user2")
    @ConfigurationProperties(prefix = "userinfo1")
    public User user(){
        return new User();
    }
}

@ConfigurationProperties(prefix = “userinfo1”) 结合配置类中@Bean方法来将配置文件中前缀为userinfo1的配置信息加载到User实例上。
这里可以看到仅仅通过new关键字实例一个User对象,并没有看到set 属性的操作,这是Spring框架帮助我们做了这一步,所以User类不能忽略 get set 方法,否则无法将配置信息设置到对应的类属性中。User类上@Data注解实现get set 方法

/**
 * @Author lyf
 * @Date 2023/2/15 - 09:20
 * @Description
 **/
@RestController
public class UserController {

    @Qualifier("user2")
    @Autowired
    private User user1;

    @GetMapping("/getUser2")
    public String getUser2(){
        return  user2.toString();
    }
}

启动项目后,请求localhost:8080/getUser2,成功将userinfo1前缀中配置的信息输出
在这里插入图片描述

2 @EnableConfigurationProperties

@EnableConfigurationProperties注解的主要作用是让@ConfigurationProperties注解生效。@Target(ElementType.TYPE) 意味着只能作用在类上。@EnableConfigurationProperties注解的主要用途是根据导入的配置类信息【使用】进一步构造需要Bean 信息,一般都搭配@Configuration+@Bean使用。
在这里插入图片描述

2.1 @EnableConfigurationProperties使用

/**
 * @Author lyf
 * @Date 2023/2/15 - 10:17
 * @Description
 **/
@Data
public class UUser {

    private int id ;
    private String username;
    private String password;
    private String email;
}

/**
 * @Author lyf
 * @Date 2023/2/15 - 09:29
 * @Description
 **/

@Configuration
@EnableConfigurationProperties(User.class)
public class Demo2 {

    private  User  user1;

    @Bean("user3")
    public UUser autoconfiguration(User user1){
        this.user1=user1;
        UUser  newUser=new UUser();
        newUser.setId(2);
        newUser.setUsername("XXXX");
        newUser.setEmail("XXXXX");
        newUser.setPassword("XXXXXX");
        return newUser;
    }
}

autoconfiguration方法依赖于User实例,尽管在autoconfiguration(User user1)方法中没有对参数赋值操作,@EnableConfigurationProperties(User.class) 告知当前配置类使用User类信息,所以在调用autoconfiguration方法时,会先从Spring IOC 容器中获取名称为user1的Bean。

/**
 * @Author lyf
 * @Date 2023/2/15 - 09:20
 * @Description
 **/
@RestController
public class UserController {

    @Qualifier("user3")
    @Autowired
    private UUser user1;

    @GetMapping("/getUser2")
    public String getUser3(){
        return  user3.toString();
    }
}

启动项目后,请求localhost:8080/getUser3,成功将构建UUser对象信息成功输出
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值