自动配置
Spring 自动配置
Spring 为我们提供了 @EnableAutoConfiguration 注解,当使用了该注解,Spring 会自动地扫描本地以及依赖中的 @Configuration 等注解的类来生成 Bean。
@Configuration
在早期的 Spring Boot 项目中,我们需要手动地指定 @Configuration:
@Configuration
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties {
private String hostName;
private int port;
private String from;
// standard getters and setters
}
如果我们不使用 @Configuration,则需要 @EnableConfigurationProperties(ConfigProperties.class)
在 Spring 应用类中进行绑定:
@SpringBootApplication
@EnableConfigurationProperties(ConfigProperties.class)
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Spring 将自动绑定属性文件中定义的任何属性,该属性文件中带有前缀 mail 且名称与 ConfigProperties 类中的字段之一相同。或者使用 AutoConfiguration,这里配置的 EnableAutoConfiguration 会自动搜索使用 @Configuration
进行注解的类,同时 @ImportResource 是自动导入关联的 XML 文件。
@EnableAutoConfiguration
@ImportResource("classpath:spring/applicationContext.xml")
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
而在 Spring Boot 2.2 版本之后,Spring 通过类路径扫描查找并注册@ConfigurationProperties 类。因此,无需使用 @Component(和其他元注释,如@Configuration)注释此类,甚至无需使用 @EnableConfigurationProperties:
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties {
private String hostName;
private int port;
private String from;
// standard getters and setters
}
当然,我们还可以使用 @ConfigurationPropertiesScan 来指定自定义地扫描路径:
@SpringBootApplication
@ConfigurationPropertiesScan("wx")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}