spring之@EnableConfigurationProperties注解的使用

1、方式一:
配置类代码:

@Data
@ConfigurationProperties(value = TestAConfig.prefix)
public class TestAConfig {
    public static final String prefix = "school.grade";

    private String name;

    private String age;

    private String weight;
}

从配置文件读取配置,此时这个类没有被spring管理,其他类不能使用@Autowired方式注入这个配置类

使用类代码:

@Component
@Slf4j
@EnableConfigurationProperties(TestAConfig.class)
public class UserA {

    @Autowired
    private TestAConfig config;
 }
@Component
@Slf4j
public class UserB {
    @Autowired
    private TestAConfig config;
 }

UserA类上使用了@Component注解,表明该类要被spring容器管理,成为了一个bean;使用了@EnableConfigurationProperties注解,表明使TestAConfig类成为被spring容器管理的bean。

提问:为什么UserB类不需要使用@EnableConfigurationProperties注解就能直接注入TestAConfig类?

回答:因为UserA类已经使TestAConfig类成为一个bean了,UserB类可以使用@Autowired方式使用TestAConfig类。但要保证UserA类被加载切UserA类的加载顺序在UserB类之前。

2、方式二:
配置类代码:

@Data
@Configuration
@ConfigurationProperties(value = TestAConfig.prefix)
public class TestAConfig {
    public static final String prefix = "school.grade";

    private String name;

    private String age;

    private String weight;
}

从配置文件读取配置,此时配置类上使用了@Configuration注解,该注解会使TestAConfig类成为一个bean,被spring容器管理,所以使用TestAConfig类的类,可以直接使用@Autowired方式注入。

使用类代码:

@Component
@Slf4j
public class UserB {
    @Autowired
    private TestAConfig config;
 }

使用类也不需要加@EnableConfigurationProperties注解。

3、方式三:构造方法注入配置类
配置类代码:

@Data
@Configuration
@ConfigurationProperties(value = TestAConfig.prefix)
public class TestAConfig {
    public static final String prefix = "school.grade";

    private String name;

    private String age;

    private String weight;
}

使用类代码:

@Component
@Slf4j
public class UserA {
 
    private TestAConfig config;
    
    public UserA(@Autowired TestAConfig aconfig){
        this.config = aconfig;
    }

}

因为配置类使用了@Configuration注解,所以TestAConfig是一个被spring容器管理的类;所以在使用类UserA中可以直接赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值