使用spring的ConfigurationProperties注解将yml中的属性映射成pojo类

在springboot下可以使用ConfigurationProperties注解,将yml中的配置在spring启动的时候映射到pojo类中

方式1 : @ConfigurationProperties + @Component 注解到bean定义类上

在这里插入图片描述

// 将类定义为一个bean的注解,比如 @Component,@Service,@Controller,@Repository
// 或者 @Configuration
@Component
// 表示使用配置文件中前缀为 section1 的属性的值初始化该bean定义产生的的bean实例的同名属性
// 在使用时这个定义产生的bean时,其属性 name 会是 Tom
@ConfigurationProperties(prefix = "section1")
public class Bean1 {
    
    
    public String getName() {
    
    
        return name;
    }

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

方式2 : @ConfigurationProperties + @Bean注解在配置类的bean定义方法上

// 这是一个一般java类,POJO,没有任何注解
package com.fchan.mysqlback.service;

import java.util.Map;

public class MysqlSingleConfiguration {
    
    

    public String url;
    public String port;
    public String userName;
    public String passWord;
    public Map<String,Object> extend;

    public Map<String,Object> getExtend() {
    
    
        return extend;
    }

    public void setExtend(Map<String,Object> extend) {
    
    
        this.extend = extend;
    }

    public String getUrl() {
    
    
        return url;
    }

    public void setUrl(String url) {
    
    
        this.url = url;
    }

    public String getPort() {
    
    
        return port;
    }

    public void setPort(String port) {
    
    
        this.port = port;
    }

    public String getUserName() {
    
    
        return userName;
    }

    public void setUserName(String userName) {
    
    
        this.userName = userName;
    }

    public String getPassWord() {
    
    
        return passWord;
    }

    public void setPassWord(String passWord) {
    
    
        this.passWord = passWord;
    }
}

使用@Bean注解将一个配置类的方法定义为一个bean
在项目的某个@Configuration配置类中通过@Bean注解在某个方法上将上面的POJO类定义为一个bean,并使用配置文件中相应的属性初始化该bean的属性。

这里所说的@Configuration配置类可以是直接通过@Configuration注解的配置类,也可以是隐含使用了@Configuration注解的类,比如下面的例子中,@SpringBootApplication隐含了@Configuration。

package com.fchan.mysqlback.service;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MysqlConfiguration {
    
    


	// @Bean 注解在该方法上定义一个bean,这种基于方法的Bean定义不一定非要出现在
	// @SpringBootApplication 注解的类中,而是出现在任何@Configuration注解了的类中都可以
	// 使用配置文件中前缀为 mysql.source 的属性的值初始化这里bean定义所产生的bean实例的同名属性
    @Bean
    @ConfigurationProperties(prefix = "mysql.source")
    public MysqlSingleConfiguration sourceMysql(){
    
    
	    // 注意,这里的 Bean2 是上面所示的一个POJO类,没有任何注解
        return new MysqlSingleConfiguration();
    }


    @Bean
    @ConfigurationProperties(prefix = "mysql.target")
    public MysqlSingleConfiguration targetMysql(){
    
    
        return new MysqlSingleConfiguration();
    }


}

注入成功
在这里插入图片描述

方式3 : @ConfigurationProperties注解到普通类然后通过@EnableConfigurationProperties定义为bean

// 该注解声明如果该类被定义为一个bean,则对应的bean实例的属性值将来自配置文件中前缀为
// section3的同名属性。但是这个注解本身并不会导致该类被作为一个bean注册
@ConfigurationProperties(prefix = "section3")
public class Bean3 {
    
    
    public String getName() {
    
    
        return name;
    }

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

    private String name;
}

**使用@EnableConfigurationProperties将上述类定义为一个bean**

@SpringBootApplication
// 该注解会将类Bean3作为一个bean定义注册到bean容器,而类Bean3上的注解
// @ConfigurationProperties(prefix = "section3")会导致目标bean
// 实例的属性值使用配置文件中前缀为section3的同名属性值来填充,也就是目标
// bean的属性name的值会是Dog
@EnableConfigurationProperties({
    
    Bean3.class})
public class Application {
    
    
    public static void main(String[] args) throws Exception {
    
    
        SpringApplication.run(Application.class, args);
    }
}

参考文章
https://blog.csdn.net/andy_zhang2007/article/details/78761651

猜你喜欢

转载自blog.csdn.net/weixin_43944305/article/details/113182687