@ConfigurationProperties无效果

本文介绍了SpringBoot中@ConfigurationProperties注解的三种使用场景:1)直接在类上使用,2)在配置类的Bean方法上,3)通过@EnableConfigurationProperties。同时提到了常见的问题如前缀设置、setter方法缺失和如何正确地将bean加入Spring容器。
摘要由CSDN通过智能技术生成

       📝个人主页:五敷有你      
 🔥系列专栏:Spring

⛺️稳中求进,晒太阳

原因有一下几点

  1. 前缀prefix没写对(概率不大,但也有)
@Data
@ConfigurationProperties(prefix = "message")
public class MyBean {


    private String msg;

    public MyBean(){
        System.out.println("MyBean初始化完成");
    }

  
}
2.类的方法中没有setter

解决方法:

  1. 用lombok的注解
  2. 或者自己写getter setter
3.写了ConfigurationProperties但是没写Component

交给spring管理

4.是用AnnotationConfigApplicationContext(MyBeanConfig.class);获取的bean不是一个spring容器(我的问题在于这个)
  1. 用spring容器的自动注入是有值的
  2. 但自己单开一个spring容器,这是两个,所以不会有值,有值的放到了第一个spring的容器中

第一个spring容器在

第二个spring容器是我在测试类开的,

 

@ConfigurationProperties 

在Spring Boot中注解@ConfigurationProperties有三种使用场景。

场景一


使用@ConfigurationProperties和@Component注解到bean定义类上,这里@Component代指同一类实例化Bean的注解。

基本使用实例如下:

// 将类定义为一个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")
	@ConfigurationProperties(prefix="spring.datasource.primary")
	public DataSource primaryDataSource() {
		return DataSourceBuilder.create().build();
	}
}


这里便是将前缀为“spring.datasource.primary”的属性,赋值给DataSource对应的属性值。

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

场景三

使用@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);
    }
}


        上述代码中,通过@EnableConfigurationProperties对User进行实例化时,便会使用到@ConfigurationProperties的功能,对属性进行匹配赋值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五敷有你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值