自动配置

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);
  }
}
上一页