1. 关键特性
- 引入依赖
- 自动配置
2. 引入依赖
将常用依赖进行组合分类,打包提供给具有相应特性的工程;
"它使用了maven和gradle的依赖传递方案,starter在自己的pom.xml文件中声明了多个依赖。……一个starter可能会传递性地引入几十个依赖。"
starter之间引用依赖传递关系如图:
3. 自动配置
如果“自动配置类”① “探测”② 到类路径下存在对应的依赖③,就会“配置”④ 使用这些依赖的工具bean⑤。
①. 在<spring-boot-autoconfigure>依赖中,依赖有自己对应的自动配置类:xxxAutoConfiguration。例如:<spring-boot-starter-data-mongodb>对应给它的自动配置类名称:MongoAutoConfiguration;
②. “利用Spring对条件化配置的支持”(即@Condition注解,springboot在此基础上提供了@ConditionalOnClass、@ConditionalOnMissingBean等条件化配置注解),当依赖的“特征”类存在在类路径下,才实例化对应的实现了该依赖必要配置的自动配置类;
还是以MongoAutoConfiguration类为例,它的源码如下:
package org.springframework.boot.autoconfigure.mongo;
import ...
@Configuration
@ConditionalOnClass({MongoClient.class})
@EnableConfigurationProperties({MongoProperties.class})
@ConditionalOnMissingBean(
type = {"org.springframework.data.mongodb.MongoDbFactory"}
)
public class MongoAutoConfiguration {
...
}
③. 所谓依赖即一些列jar包,jar包里存在实现功能相关的class文件;
④. 所谓配置即实例化bean的对象在容器中;(Spring特性:如何创建并配置一个第三方bean的方法,参考:https://blog.youkuaiyun.com/coding_sleep/article/details/106391749)
⑤. 以SpringMVC为例,工具类包括:视图解析器、资源处理器以及消息转换器等;
附
参考:《Spring实战(第4版)》