- 作者简介
- 内容提要
- 关于本书
- 路线图
- 代码规范与下载
- 作者在线
- 封面插图简介
- 前言
- 译者序
- 致谢
- 第1部分 Spring 的核心
- 第1章 Spring 之旅
- 第2章 装配 Bean
- 第3章 高级装配
- 第4章 面向切面的 Spring
- 第2部分 Web 中的 Spring
- 第5章 构建 Spring Web 应用程序
- 第6章 渲染 Web 视图
- 第7章 Spring MVC 的高级技术
- 第8章 使用 Spring Web Flow
- 第9章 保护 Web 应用
- 第3部分 后端中的 Spring
- 第10章 通过 Spring 和 JDBC 征服数据库
- 第11章 使用对象-关系映射持久化数据
- 第12章 使用 NoSQL 数据库
- 第13章 缓存数据
- 第14章 保护方法应用
- 第4部分 Spring 集成
- 第15章 使用远程服务
- 第16章 使用 Spring MVC 创建 REST API
- 第17章 Spring消息
- 第18章 使用 WebSocket 和 STOMP 实现消息功能
- 第19章 使用 Spring 发送 Email
- 第20章 使用 JMX 管理 Spring Bean
- 第21章 借助 Spring Boot 简化 Spring 开发
21.1.1 添加 Starter 依赖
有两种烤制蛋糕的方式,有热情的人会将面粉、鸡蛋、糖、发酵粉、盐、奶油、香草调料以及牛奶混合在一起,和成糊状。或者也可以购买预先打包好的蛋糕,它包含了所需的大部分原料,我们只需添加一些含水分的材料即可,如水、鸡蛋和植物油。
预先打包好的蛋糕将制作蛋糕过程中所需的各种材料集合在了一起,作为一项材料来使用,与之类似,Spring Boot Starter将应用所需的各种依赖聚合成一项依赖。
为了阐述该功能,假设我们要从头开始编写一个新的Spring应用。这是一个Web项目,所以需要使用Spring MVC。同时,还要有REST API将资源暴露为JSON,所以在构建中需要包含Jackson JSON库。
因为应用需要使用JDBC从关系型数据库中存储和查询数据,因此我们希望确保包含了Spring的JDBC模块(为了使用JdbcTemplate)和Spring的事务模块(为了使用声明式事务的支持)。对于数据库本身,H2数据库是个不错的选择。
对了,我们还需要使用Thymeleaf来建立Spring MVC视图。
如果使用Gradle构建项目的话,在build.gradle中(至少)需要包含如下的依赖:
幸好,Gradle能够非常简洁地表达依赖。(为简单起见,我不再展现这个依赖列表在Maven的pom.xml文件是什么样子了。)即便如此,创建这个文件还是牵扯到许多的事情,而对它的维护则会更加麻烦。这些依赖之间是如何协作的呢?当应用程序不断地成长和演进,依赖管理将会变得更加具有挑战性。
但是,如果我们使用Spring Boot Starer所提供的预打包依赖的话,那么Gradle依赖列表能够更加简短一些:
可以看到,Spring Boot的Web和JDBC Starter取代了几个更加细粒度的依赖。我们依然还需要包含H2和Thymeleaf的依赖,不过其他的依赖都已经放到了Starter中。除了依赖列表更加简短,我们可以相信由Starter所提供的依赖版本能够互相兼容。
Spring Boot提供了多个Starter,Web和JDBC只是其中的两个。表21.1列出了我在编写本章时,所有可用的Starter。
表21.1 Spring Boot Starter依赖将所需的常见依赖按组聚集在一起,形成单条依赖
Starter | 所提供的依赖 |
spring-boot-starter-actuator | spring-boot-starter 、spring-boot-actuator 、spring-core |
spring-boot-starter-amqp | spring-boot-starter 、spring-boot-rabbit 、spring-core 、 spring-tx |
spring-boot-starter-aop | spring-boot-starter 、spring-aop 、AspectJ Runtime 、AspectJ Weaver 、spring-core |
spring-boot-starter-batch | spring-boot-starter 、HSQLDB 、spring-jdbc 、spring-batch-core 、spring-core |
spring-boot-starter-elasticsearch | spring-boot-starter、 spring-data-elasticsearch、 spring-core、 spring-tx |
spring-boot-starter-gemfire | spring-boot-starter、 Gemfire、 spring-core、 spring-tx、 spring-context、 spring-context-support、 spring-data-gemfire |
spring-boot-starter-data-jpa | spring-boot-starter、 spring-boot-starter-jdbc、 spring-boot-starter-aop、 spring-core、 Hibernate EntityManager、 spring-orm、 spring-data-jpa、 spring-aspects |
spring-boot-starter-data-mongodb | spring-boot-starter、 MongoDB Java 驱动 、 spring-core、 spring-tx、 spring-data-mongodb |
spring-boot-starter-data-rest | spring-boot-starter、 spring-boot-starter-web、 Jackson 注解 、 Jackson 数据绑定 、 spring-core、 spring-tx、 spring-data-rest-webmvc |
spring-boot-starter-data-solr | spring-boot-starter、 Solrj、 spring-core、 spring-tx、 spring-data-solr、 Apache HTTP Mime |
spring-boot-starter-freemarker | spring-boot-starter、 spring-boot-starter-web、 Freemarker、 spring-core、 spring-context-support |
spring-boot-starter-groovy-templ-ates | spring-boot-starter、 spring-boot-starter-web、 Groovy、 Groovy 模板、spring-core |
spring-boot-starter-hornetq | spring-boot-starter、 spring-core、 spring-jms、 Hornet JMS Client |
spring-boot-starter-integration | spring-boot-starter、 spring-aop、 spring-tx、 spring-web、 spring-webmvc、 spring-integration-core、 spring-integration-file、 spring-integration-http、 spring-integration-ip、 spring-integration-stream |
spring-boot-starter-jdbc | spring-boot-starter、 spring-jdbc 、tomcat-jdbc、 spring-tx |
spring-boot-starter-jetty | jetty-webapp、 jetty-jsp |
spring-boot-starter-log4j | jcl-over-slf4j、 jul-to-slf4j 、slf4j-log4j12、log4j |
spring-boot-starter -logging | jcl-over-slf4j、 jul-to-slf4j 、log4j-over-slf4j、 logback-classic |
spring-boot-starter-mobile | spring-boot-starter、 spring-boot-starter-web、 spring-mobile-device |
spring-boot-starter-redis | spring-boot-starter、 spring-data-redis、 lettuce |
spring-boot-starter-remote-shell | spring-boot-starter-actuator、 spring-context、 org.crashub.** |
spring-boot-starter-security | spring-boot-starter、 spring-security-config、 spring-security-web、 spring-aop、 spring-beans、 spring-context、 spring-core、 spring-expression、 spring-web |
spring-boot-starter-social-facebook | spring-boot-starter、 spring-boot-starter-web、 spring-core、 spring-social-config、 spring-social-core、 spring-social-web、 spring-social-facebook |
spring-boot-starter-social-twitter | spring-boot-starter、 spring-boot-starter-web、 spring-core、 spring-social-config、 spring-social-core、 spring-social-web、 spring-social-twitter |
spring-boot-starter-social-linkedin | spring-boot-starter、 spring-boot-starter-web、 spring-core、 spring-social-config、 spring-social-core、 spring-social-web、 spring-social-linkedin |
spring-boot-starter | spring-boot、 spring-boot-autoconfigure、 spring-boot-starter-logging |
spring-boot-starter-test | spring-boot-starter-logging、 spring-boot、 junit、mockito-core、 hamcrest-library、 spring-test |
spring-boot-starter-thymeleaf | spring-boot-starter、 spring-boot-starter-web、 spring-core、 thymeleaf-spring4、 thymeleaf-layout-dialect |
spring-boot-starter-tomcat | tomcat-embed-core、 tomcat-embed-logging-juli |
spring-boot-starter-web | spring-boot-starter、 spring-boot-starter-tomcat、 jackson-databind、 spring-web、 spring-webmvc |
spring-boot-starter-websocket | spring-boot-starter-web、 spring-websocket、 tomcat-embed-core、 tomcat-embed-logging-juli |
spring-boot-starter-ws | spring-boot-starter、 spring-boot-starter-web、 spring-core、 spring-jms、 spring-oxm、 spring-ws-core、 spring-ws-support |
如果查看这些Starter依赖的内部原理,你会发现Starter的工作方式也没有什么神秘之处。它使用了Maven和Gradle的依赖传递方案,Starter在自己的pom.xml文件中声明了多个依赖。当我们将某一个Starter依赖添加到Maven或Gradle构建中的时候,Starter的依赖将会自动地传递性解析。这些依赖本身可能也会有其他的依赖。一个Starter可能会传递性地引入几十个依赖。
需要注意,很多Starter引用了其他的Starter。例如,mobile Starter就引用了Web Starter,而后者又引用了Tomcat Starter。大多数的Starter都会引用spring-boot-starter,它实际上是一个基础的Starter(当然,它也依赖了logging Starter)。依赖是传递性的,将mobile Starter添加为依赖之后,就相当于添加了它下面的所有Starter。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论