Sapringboot配置绑定

如何做到用java读取properties文件中的内容,并且将其封装到JavaBean中,以供随时使用。

public class getProperties {
     public static void main(String[] args) throws FileNotFoundException, IOException {
         Properties pps = new Properties();
         pps.load(new FileInputStream("a.properties"));
         Enumeration enum1 = pps.propertyNames();//得到配置文件的名字
         while(enum1.hasMoreElements()) {
             String strKey = (String) enum1.nextElement();
             String strValue = pps.getProperty(strKey);
             System.out.println(strKey + "=" + strValue);
             //封装到JavaBean。
         }
     }
 }

@ConfigurationProperties

Spring源码中大量使用了ConfigurationProperties注释,比如server.port就是由该注释获取到的,通过与其他注释配合使用,能够实现Bean的按需配置。
该注释有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注释可以放在类上,也可以放在方法上
在这里插入图片描述

/**
 * 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
 */
@Component
@ConfigurationProperties(prefix = "mycar")//将car中的brand和price和配置中的maycar进行绑定,prefix是前缀的意思
public class Car {

    private String brand;
    private Integer price;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                '}';
    }
}

上面是绑定的一个小例子。
事实上,在SpringBoot中注释@ConfigurationProperties有三种使用场景:

使用@ConfigurationProperties和==@Component注释到bean定义类==上

这里@Component将类定义为一个Bean的注释,何为注解?注解本质上就是一个类,开发中我们可以使用注解 取代 xml配置文件。web开发,提供3个@Component注解衍生注解(功能一样)取代 @Repository(“名称”):dao层 @Service(“名称”):service层 @Controller(“名称”):web层

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

对应的application.properties配置文件内容如下:

user1.name=Tom

在此种场景下,当Bean被实例化时,@ConfigurationProperties会将对应前缀的后面的属性与Bean对象的属性匹配。符合条件则进行赋值。

使用@ConfigurationProperties和==@Bean注解在配置类的Bean定义方法==上。
@Configuration
public class DataSourceConfig {

	@Primary
	@Bean(name = "primaryDataSource")
	//Spring的bean中有name属性,可以用来区分两个相同(部分属性不一样)的bean。
	@ConfigurationProperties(prefix="spring.datasource.primary")
	public DataSource primaryDataSource() {
		return DataSourceBuilder.create().build();
	}
}

这里便是将前缀为“spring.datasource.primary”的属性,赋值给DataSource对应的属性值。@Configuration注解的配置类中通过@Bean注解在某个方法上将方法返回的对象定义为一个Bean,并使用配置文件中相应的属性初始化该Bean的属性。

使用@ConfigurationProperties注解在普通类的Bean定义方法上。

@EnableConfigurationProperties(XXX.class)1.开启XXX的属性配置绑定功能 2.把XXX这个组件自动注册到容器中
使用方法是:使用@ConfigurationProperties注解到普通类,然后再通过@EnableConfigurationProperties定义为Bean。

@ConfigurationProperties(prefix = "user1")
public class User {
	private String name;
	// 省略getter/setter方法
}

这里User对象并没有使用@Component相关注解。
而该User类对应的使用形式如下:

@SpringBootApplication
@EnableConfigurationProperties({User.class})
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

该方法非常适用于拿到一个第三方类,但是又不想修改其代码,可以在使用的时候,自己将其搞一个bean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值