@EnableConfigurationProperties + @ConfigurationProperties
@EnableConfigurationProperties注解有两个功能:
1.开启参数cat的配置绑定功能
2.将参数cat自动注册到容器中,也就是说在cat的实体类中不需要加@Component注解
注意: 1.@ConfigurationProperties注解还是要加的;
2.注解要添加在配置类上
系统要求
Java 8+
Maven 3.6.6 +
创建Maven项目工程
引入 pom.xml 依赖
<!--1.导入父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
</parent>
<!--2.导入springBoot的Web场景-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<!--
SpringBoot项目默认打成jar包
传统web项目我们需要打成war包,放入tomcat中运行,springBoot项目我们可以导入一个插件,
在项目打成jar包的同时,还会顺带打包运行环境,所以只要直接运行jar包也可以访问项目
-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
创建实体类 pojo.Cat类
package com.xiang.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* Created by IntelliJ IDEA.
* User: xiang
* Date: 2021/10/12 14:05
*/
/**
* 只有在容器中的组件,才会拥有SpringBoot提供的功能,也就是才可以使用注解
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
//@Component
@ConfigurationProperties(prefix = "cat")
//该注解表示:从application.properties中读取前缀为cat的数据赋值给下列属性,注意文件中的属性名和实体类中的属性名一致
public class Cat {
private String name;
private double price;
}
application.properties文件
#在配置文件中给Cat这个实例赋值
cat.name="tom"
cat.price=500.00
新建 MyConfig 类
package com.xiang.config;
import com.xiang.pojo.Cat;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* Created by IntelliJ IDEA.
* User: xiang
* Date: 2021/10/12 15:42
*/
@Configuration
@EnableConfigurationProperties(Cat.class)
//该注解有两个功能:
//1.开启参数cat的配置绑定功能
//2.将参数cat自动注册到容器中,也就是说在cat的实体类中不需要加@Component注解
//注意:@ConfigurationProperties注解还是要加的
public class MyConfig {
}
主程序进行测试 MainApplication 类
package com.xiang;
import com.xiang.pojo.Cat;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
/**
* Created by IntelliJ IDEA.
* User: xiang
* Date: 2021/10/12 14:35
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);
// Cat cat = context.getBean("cat", Cat.class); //这个会报错---->: No bean named 'cat' available
Cat cat = context.getBean("cat-com.xiang.pojo.Cat", Cat.class);
System.out.println(cat);
/**
* Cat(name="tom", price=500.0)
*/
System.out.println("/**************************************************/");
System.out.println("遍历容器中的所有组件");
//遍历容器中的所有组件
//getBeanDefinitionNames():返回容器中的所有组件
String[] names = context.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
/**
* cat-com.xiang.pojo.Cat
*/
}
}
运行结果
Cat(name="tom", price=500.0)
/**************************************************/
遍历容器中的所有组件
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
mainApplication
org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory
myConfig
org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor
org.springframework.boot.context.internalConfigurationPropertiesBinderFactory
org.springframework.boot.context.internalConfigurationPropertiesBinder
org.springframework.boot.context.properties.BoundConfigurationProperties
org.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.methodValidationExcludeFilter
cat-com.xiang.pojo.Cat
org.springframework.boot.autoconfigure.AutoConfigurationPackages
......