Spring Boot 起步依赖
参考书《Spring Boot实战》
1.Spring Boot起步依赖
Spring项目的依赖管理也很费力。需要决定项目要用哪些库,还要考虑库的版本和其他库的版本不会用冲突。
原来的Spring项目中,如果要使用某项功能,需要考虑支持该功能需要什么库?需要考虑 库的Group和Artifact?库的版本号?哪个版本不会和项目中的其他依赖发生冲突?
Spring Boot就可以指定基于功能依赖。Spring Boot通过起步依赖为项目的依赖管理提供帮助。如果应用程序是Web应用程序(功能),不需要向项目pom.xml文件中添加一堆单独的依赖,可以直接向项目中添加Web起步依赖。如果应用程序需要用到JPA持久化(功能),加入jpa起步依赖;如果需要安全功能(功能),就加入security起步依赖。添加依赖时不需要指定依赖的版本号,依赖的版本号由当前是使用的Spring Boot版本号来决定。
起步依赖就是特殊的Maven依赖,利用了传递依赖解析,把常用库聚合在一起,组成几个为特定功能而定制的依赖。Spring Boot通过起步依赖:直接引入相关起步依赖就行,我们不需要考虑支持某种功能需要什么库, 减少了依赖数量,而且不需要考虑这些库的那些版本。如果我们需要什么功能,就往项目中加入该功能的起步依赖就好了。
添加起步依赖的方法:可以在初始话应用程序的时候,选择起步依赖。或者在开发过程中修改pom.xml文件来添加起步依赖。
查看当前使用的依赖,可在pom.xml所在目录 在cmd窗口执行 mvn dependency:tree 命令
在特殊的情况下覆盖或排除这些传递依赖: 比如Spring Boot的Web起步依赖,它传递依赖了 Jackson JSON库,如果应用程序里不需要这个库,可以选择把这个库排除掉来给应用程序瘦身。或者Web传递依赖的Jackson JSON库是Jackson 2.3.4版本,但是应用程序需要使用Jackson 2.4.3版本,那可以在pom.xml文件中覆盖 Web传递依赖的Jackson库。Maven总是会用最近的依赖 。PS:如果没有特殊情况,那就最好不要 排除或覆盖掉 这些起步依赖的 传递依赖,因为这些传递依赖都是经过测试的,不会用版本不兼容的情况出现。
<!--排除依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
<!--用指定依赖版本 覆盖 传递依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
比如一个项目用Spring MVC构造一个REST API, 并将JSON作为资源表述,遵循JSR-303规范的声明式校验,使用嵌入式的Tomcat服务器来提供服务。那么原来的Spring项目 在Maven里至少需要以下8个依赖。
org.springframework:spring-core
org.springframework:spring-web
org.springframework:spring-webmvc
com.fasterxml.jackson.core:jackson-databind
org.hibernate:hibernate-validator
org.apache.tomcat.embed:tomcat-embed-core
org.apache.tomcat.embed:tomcat-embed-el
org.apache.tomcat.embed:tomcat-embed-logging-juli
但是如果使用Spring Boot的起步依赖,只需添加Spring Boot的Web起步依赖,一个就可以达到以上目的。它会根据依赖传递把其它依赖引入项目,我们无需考虑。
org.springframword.boot:spring-boot-starter-web
2.Spring Boot 起步依赖和自动配置的关系
Spring Boot提供了简化企业家开发绝大多数场景的starter pom(起步依赖),只要在应用程序中使用了需要的starter pom,相关的技术配置将会消除,就可以得到Spring Boot提供的自动配置的Bean。 除了Spring Boot官方的 起步依赖,还是很多第三方为Spring Boot提供的起步依赖。