@ConfigurationProperties属性注入

我今天学习@ConfigurationProperties(prefix = "demo")这个注解的作用是发现个问题,求解答
在测试类中

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigurationBindingDemo.class);
    ConfigurationBindingDemo configurationBindingDemo= applicationContext.getBean("configurationBindingDemo", ConfigurationBindingDemo.class);
    System.out.println(configurationBindingDemo.getEmail());
得到的结果是null
这里为什么是null,为什么没有属性赋值
@Resource
    private ConfigurationBindingDemo configurationBindingDemo;

    @Test
    public void test02(){
        System.out.println(configurationBindingDemo.getEmail());
    }

这个就是注入的值

@ConfigurationProperties 这个注解只是方便快捷的注入属性,它本身不会将类加入到spring的容器中,需要配合 @Component 注解才行,具体可以参考这个博客 https://blog.csdn.net/yanluandai1985/article/details/99446060

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇文章:@ConfigurationProperties注解的作用 也许有你想要的答案,你可以看看
  • 除此之外, 这篇博客: 注解@ConfigurationProperties使用方法中的 1 配置在类上 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

     

  • 以下回答来自chatgpt:

    要使用@ConfigurationProperties进行属性注入,需要完成以下步骤:

    1. 确保在Spring Boot项目中引入了相关依赖,包括spring-boot-starter和spring-boot-configuration-processor。

    2. 创建一个类,用于存储待注入的属性,并使用@Component将其注入到Spring容器中。

    3. 在该类上使用@ConfigurationProperties注解,指定注入的属性前缀。

    4. 确保属性的命名与配置文件中的属性名一致,并提供对应的setter方法。

    5. 在需要使用这些属性的类中,通过@Autowired或@Resource等方式注入上述属性类的实例,并使用其中的相关属性。

    以下是一个简单的示例:

    • 创建一个属性类Person,存储id、name、hobby等人物属性:
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private int id;
        private String name;
        private List<String> hobby;
        // 省略其它属性和getter/setter方法
    }
    
    • 在application.yml或application.properties文件中,指定待注入的属性值:
    person:
      id: 123
      name: John
      hobby:
        - hiking
        - reading
    
    • 在需要使用这些属性的类中,注入Person类的实例,并使用其中的属性:
    @Service
    public class UserService {
        @Autowired
        private Person person; // 注入Person类的实例
    
        public void printUserInfo() {
            System.out.println("User ID: " + person.getId());
            System.out.println("User Name: " + person.getName());
            System.out.println("User Hobbies: " + person.getHobby());
        }
    }
    

    在上面的示例中,如果执行UserService类的printUserInfo()方法,就会输出注入的Person实例的id、name和hobby等属性。

    需要注意的是,如果属性类中定义了自定义类型的属性,如Pet类,也可以按照以上方式进行注入,前提是Pet类也必须使用@ConfigurationProperties注解进行注入。如果存在多个属性类,可以使用@Import注解将它们引入。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^