我今天学习@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进行属性注入,需要完成以下步骤:
确保在Spring Boot项目中引入了相关依赖,包括spring-boot-starter和spring-boot-configuration-processor。
创建一个类,用于存储待注入的属性,并使用@Component将其注入到Spring容器中。
在该类上使用@ConfigurationProperties注解,指定注入的属性前缀。
确保属性的命名与配置文件中的属性名一致,并提供对应的setter方法。
在需要使用这些属性的类中,通过@Autowired或@Resource等方式注入上述属性类的实例,并使用其中的相关属性。
以下是一个简单的示例:
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private int id;
private String name;
private List<String> hobby;
// 省略其它属性和getter/setter方法
}
person:
id: 123
name: John
hobby:
- hiking
- reading
@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注解将它们引入。