Loading... ## ConfigrationProperties 先看普通的@ConfigrationProperties的基本使用 这个注解表示它可以使用yaml注入属性值。 通常还需要指定它为一个@Component,将这个类纳入IoC容器的管理。自动扫描进IoC。 它的后面需要指定prefix值,这表明了对应yaml的前缀。 步骤: 1. 在要放入IoC容器中的类上添加两个注解 ``` @Component // 表示这个类会被放进IoC容器管理 @ConfigurationProperties(prefix = "dog") // 表示这个类可以使用yaml注入,它在yaml中的名字为dog public class Dog { @Value("旺财") // 会被yaml注入值覆盖,若yaml中没有,则使用这个值 private String name; @Value("3") // 会被yaml中的注入值覆盖,若没有,则使用这个注入的值 private Integer age; ....... // 构造函数,setter,getter,toString() } ``` 2. application.yaml ``` dog: name: 旺财233 ``` 3. 测试 ``` @SpringBootTest class Springboot02ConfigApplicationTests { @Autowired // autowired表示这个对象是从IoC容器提取出来的 private Dog dog; @Test void contextLoads() { System.out.println(dog); } } ``` 4. 观察输出,可以看到,名字被yaml注入值覆盖了;年龄是采用@Value注入后的值(不是空值) ``` Dog{name='旺财233', age=3} ``` ## EnableConfigurationProperties 在很多spring源码中,常见的注解,通常将它应用到spring的配置类下, 即,`@EnableConfigurationProperties`与`@Configuration`(声明是一个配置类,管理很多Bean)会经常成对使用。 @EnableConfigurationProperties 可以让指定的类纳入IoC管理,成为一个Bean。而不需要使用@Component这个注解。 下面以Spring的某源码为例。 HttpEncodingAutoConfiguration ````java package org.springframework.boot.autoconfigure.web.servlet; import ..... // 从Configuration 可以看出这个类是一个spring配置类。代替spring的xml配置文件,里面放着各种bean配置声明 @Configuration(proxyBeanMethods = false) // 配置其中的属性 @EnableConfigurationProperties(ServerProperties.class) // 判断条件,是否生效。 @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) @ConditionalOnClass(CharacterEncodingFilter.class) @ConditionalOnProperty(prefix = "server.servlet.encoding", value = "enabled", matchIfMissing = true) public class HttpEncodingAutoConfiguration { private final Encoding properties; public HttpEncodingAutoConfiguration(ServerProperties properties) { this.properties = properties.getServlet().getEncoding(); } @Bean @ConditionalOnMissingBean public CharacterEncodingFilter characterEncodingFilter() { ...... } ......... } ```` ServerProperties.java ```java ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) public class ServerProperties { /** * Server HTTP port. */ private Integer port; /** * Network address to which the server should bind. */ private InetAddress address; ........ } ``` 最后修改:2020 年 08 月 17 日 04 : 30 PM © 允许规范转载