如果使用Spring Boot必须选择一个原因,这将是自动配置,这是Spring Boot后面的魔力,Spring Boot自动配置是一种基于类路径上存在的依赖关系自动配置应用程序的功能,无需开发人员自己付出任何努力。这是遵循 约定优于配置 范式的Spring Boot方法 ,即将程序员在使用框架时必须做出的决策数量最小化,同时提供合理的默认值但不会失去灵活性。
所以,我们都知道@SpringBootApplication基本上由3个注释组成。
我们现在将重点关注@EnableAutoConfiguration。简而言之,这个注释的作用是 :
“它将自动注入我们的应用程序所需的所有bean,具体取决于Spring Boot在类路径中找到的内容”
@EnableAutoConfiguration注释使用了Spring Core中的概念。许多Spring开发人员必须知道Spring 3中的@Enable *注释,如@EnableWebMvc和@EnableScheduling等。所以这些注释是为了特定的目的,比现在更具限制性。
@EnableAutoConfiguration的作用是在应用程序启动时:
可以看一下spring-boot-autoconfigure jar中的META-INF / spring.factories。 在此文件中,我们可以看到默认情况下可用的Spring Boot自动配置列表。
演示
============================ CONDITIONS EVALUATION REPORT ============================ Positive matches: ----------------- GenericCacheConfiguration matched: - Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration automatic cache type (CacheCondition) JmxAutoConfiguration matched: - @ConditionalOnClass found required <b>class</b> 'org.springframework.jmx.export.MBeanExporter' (OnClassCondition) - @ConditionalOnProperty (spring.jmx.enabled=<b>true</b>) matched (OnPropertyCondition) JmxAutoConfiguration#mbeanExporter matched: - @ConditionalOnMissingBean (types: org.springframework.jmx.export.MBeanExporter; SearchStrategy: current) did not find any beans (OnBeanCondition) Negative matches: ----------------- ActiveMQAutoConfiguration: Did not match: - @ConditionalOnClass did not find required <b>class</b> 'javax.jms.ConnectionFactory' (OnClassCondition) AopAutoConfiguration: Did not match: - @ConditionalOnClass did not find required <b>class</b> 'org.aspectj.lang.annotation.Aspect' (OnClassCondition) ArtemisAutoConfiguration: Did not match: - @ConditionalOnClass did not find required <b>class</b> 'javax.jms.ConnectionFactory' (OnClassCondition) BatchAutoConfiguration: Did not match: - @ConditionalOnClass did not find required <b>class</b> 'org.springframework.batch.core.launch.JobLauncher' (OnClassCondition)
我们可以看到之前处于 Negative Matches负面匹配中的几个bean现在处于Positive matches正匹配中。
其中一些是:
还有一些与JPA有关。
SpringFactoriesLoader查看类路径中所有META_INF / spring.factories文件的属性,并尝试将其与应用程序中的可用配置相匹配。如果该属性在我们的应用程序中作为配置提供了,它会注入特定的bean或将其标记为negative matches负面匹配。