自动配置

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