1. 自动配置原理:
spring boot项目的入口类的注解@SpringBootApplication引入了@EnableAutoConfiguration。后者又通过@Import引入了EnableAutoConfigurationImportSelector类, EnableAutoConfigurationImportSelector类通过方法调用链selectImports()->getCandidateConfigurations->SpringFactoriesLoader.loadFactoryNames(),获得了在spring-boot-autoconfig jar包中META-INF/spring.factories文件的org.springframework.boot.autoconfigure.EnableAutoConfiguration属性所要求的所有需要自动配置的AutoConfiguration。这些自动配置的AutoConfiguration一般由@Configuration注解,由其同一目录下的相关基于属性的Bean定义属性,并且在这些AutoConfiguration中包含了返回Bean的由@Conditional+条件进行注解的方法,因此在项目中可以通过@Autowired、@Resource等方式直接进行注入。(以上原理说明均由spring boot源代码得到)。
2. 示例的步骤:
步骤一:建立自动配置的maven组件包。该包模拟autoconfig组件建立了基于properties的安全类型的Bean(即@ConfigurationProperties注解的Bean),应用该Bean的自动配置的AutoConfiguration(由@Configuration注解,使用上一Bean的属性),AutoConfiguration中包含应用上一Bean属性的服务Bean, 并在资源目录下建立META-INF/spring.factories文件,文件中为org.springframework.boot.autoconfigure.EnableAutoConfiguration属性确定了AutoCOnfiguration的全限定名。最后按照组件包(mvn:install)。
步骤二:建立一个依赖web的spring boot项目。项目还依赖了上面建立的maven组件,在入口类中通过@Autowired注入maven组件中的服务Bean,再在入口类的@RequestMapping注解的方法中使用该服务Bean,从而验证maven组件自动配置的正确性。
3. 示例
步骤一:
demo-autoconfig maven组件的pom.xml
依赖autoconfig组件的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.demo</groupId>
<artifactId>demo-autoconfig</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo-autoconfig</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<org.springframework.version>2.0.2.RELEASE</org.springframework.version>
</properties>
<dependencies>
<dependency>
<!-- autoconfigure support -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure&l