Spring Boot的优点
- 快速创建独立运行的spring项目与主流框架集成
- 使用嵌入式的servlet容器,应用无需打包成war包
- starters自动依赖与版本控制
- 大量的自动配置,简化开发,也可以修改默认值
- 提供准生产环境的运行应用监控
- 与云计算天然集成
Spring Boot常用的starter
- spring-boot-starter-web(嵌入tomcat和web开发需要的servlet和jsp支持)
- spring-boot-starter-data-jpa(数据库支持)
- spring-boot-starter-data-redis(redis支持)
- spring-boot-starter-data-solr(solr搜索应用框架支持)
- mybatis-spring-boot-starter(第三方mybatis集成starter)
Spring Boot自动配置原理
Spring Boot开启的注解是@SpringBootApplication,其实它由三个注解组成@Configuration,@ComponentScan,@EnableAutoConfiguration。前面两个注解都是Spring的,和Spring Boot无关。Spring Boot最核心的注解就是@EnableAutoConfiguration。它能根据类路径下的jar包和配置动态加载配置和注入bean。
@EnableAutoConfiguration注解是一个派生注解,其中关键功能由@Import提供,其导入的AutoConfigurationImportSelector.class的selectImports()方法,通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包。查找key是EnableAutoConfiguration类的全名,它的value是一个类名的列表,这些类名用逗号分隔。@EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在SpringApplication.run(...)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Spring容器中。
spring.factories里的每一个配置类上的主要注解有@Configuration,@ConditionalOnBean,@ConditionalOnMissingBean,@ConditionalOnClass,@ConditionalOnMissingClass等。在工厂方法上有@Bean注解,初始化对应的bean。