starter 里到底有什么?为什么加一个依赖就多出一个 Web 服务器?各个 starter 拉来多少 jar?这篇直接解析依赖、打开 starter 的 jar、对比同一份启动代码在不同类路径下的差别。
spring-boot-starter 21 个 jar,共 8.4 MB;其中 spring-boot-* 模块 2 个,starter 自身 2 个 spring-boot-starter-webmvc 39 个 jar,共 18.7 MB;其中 spring-boot-* 模块 8 个,starter 自身 6 个 spring-boot-starter-webflux 65 个 jar,共 33.6 MB;其中 spring-boot-* 模块 9 个,starter 自身 5 个 spring-boot-starter-data-jpa 55 个 jar,共 40.3 MB;其中 spring-boot-* 模块 10 个,starter 自身 4 个 spring-boot-starter-security 28 个 jar,共 14.2 MB;其中 spring-boot-* 模块 3 个,starter 自身 3 个 spring-boot-starter-actuator 32 个 jar,共 10.4 MB;其中 spring-boot-* 模块 7 个,starter 自身 4 个 spring-boot-starter-validation 28 个 jar,共 10.2 MB;其中 spring-boot-* 模块 3 个,starter 自身 3 个 spring-boot-starter-test 50 个 jar,共 23.2 MB;其中 spring-boot-* 模块 4 个,starter 自身 3 个
不同的 starter 拉来的依赖数量差别很大。
spring-boot-starter-webmvc-4.0.8.jar:共 4 个条目,其中 .class 文件 0 个,大小 4749 字节;条目 = ['META-INF/MANIFEST.MF', 'META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'] spring-boot-starter-data-jpa-4.0.8.jar:共 4 个条目,其中 .class 文件 0 个,大小 4761 字节;条目 = ['META-INF/MANIFEST.MF', 'META-INF/LICENSE.txt', 'META-INF/NOTICE.txt']
starter 本身没有代码,只有 pom。
org.springframework.boot:spring-boot-starter compile org.springframework.boot:spring-boot-starter-jackson compile org.springframework.boot:spring-boot-starter-tomcat compile org.springframework.boot:spring-boot-http-converter compile org.springframework.boot:spring-boot-webmvc compile
直接依赖几个模块,自动配置在模块里。
类路径 = spring-boot-starter:应用类型 = NONE,Bean 总数 = 50,类路径上有 DispatcherServlet = false,有 Tomcat 的 Bean = false,启动用时 348 ms 类路径 = spring-boot-starter-webmvc:应用类型 = SERVLET,Bean 总数 = 143,类路径上有 DispatcherServlet = true,有 Tomcat 的 Bean = true,启动用时 692 ms
类路径变了,自动配置就跟着变。