前面的Web项目没有发现任何XML配置,直接编写controller即可进行web功能开发,非常方便,原因何在?
关键点就在pom.xml的配置,下面来分析一下pom.xml的内容:
父工程已经集成大量的框架依赖,解决了依赖包版本冲突问题
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.2.RELEASEversion>
<relativePath/>
parent>
首先在pom.xml里面,引入了一个父工程spring-boot-starter-parent
,该项目又继承了一个父工程spring-boot-dependencies
在spring-boot-dependencies
工程中,已经配置好了大量工具的版本,管理了SpringBoot应用中的所有依赖版本,并且处理了依赖问题,避免包冲突。
<!-- 版本管理 -->
<properties>
<activemq.version>5.15.13activemq.version>
<antlr2.version>2.7.7antlr2.version>
<appengine-sdk.version>1.9.81appengine-sdk.version>
<artemis.version>2.12.0artemis.version>
<aspectj.version>1.9.6aspectj.version>
<assertj.version>3.16.1assertj.version>
<atomikos.version>4.0.6atomikos.version>
...
<mysql.version>8.0.21mysql.version>
<tomcat.version>9.0.37tomcat.version>
<unboundid-ldapsdk.version>4.0.14unboundid-ldapsdk.version>
<undertow.version>2.1.3.Finalundertow.version>
<versions-maven-plugin.version>2.7versions-maven-plugin.version>
<webjars-hal-browser.version>3325375webjars-hal-browser.version>
<webjars-locator-core.version>0.45webjars-locator-core.version>
<wsdl4j.version>1.6.3wsdl4j.version>
<xml-maven-plugin.version>1.0.2xml-maven-plugin.version>
<xmlunit2.version>2.7.0xmlunit2.version>
properties>
...
<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>com.querydslgroupId>
<artifactId>querydsl-mongodbartifactId>
<version>${querydsl.version}version>
<exclusions>
<exclusion>
<groupId>org.mongodbgroupId>
<artifactId>mongo-java-driverartifactId>
exclusion>
exclusions>
dependency>
...
dependencies>
dependencyManagement>
以后我们导入依赖,可以不导入版本号,使用默认版本,如果版本不符合开发要求可以调整,例如mysql的默认版本是8.x,可以在自己的项目中指定版本,修改成实际开发使用的版本。
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>6.0.5version>
dependency>
Web项目环境使用SpringBoot只导入了一个依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
这里就需要介绍一下导入的这个依赖
这个依赖的项目名:spring-boot-starter-web
项目名需要拆为2部分来理解
没用starter之前整合Spring MVC的步骤:
引入web mvc相关的依赖
引入spring相关的依赖
在web.xml中配置spring MVC
在springmvc.xml中配置注解扫描、视图解析器…
下次新建spring整合springMVC的项目的时候,还需要重复的做一次。这样做有几个问题:
使用Spring Boot Starter提升效率,SpringBoot 将所有的功能场景抽取出来,封装成一个个的starter,在项目中只需要引入所需的starter即可
starters
描述
spring-boot-starter-aop
Spring AOP和Aspect J面向方面编程的启动器
spring-boot-starter-data-jdbc
Spring Data JDBC的启动器
spring-boot-starter-web
用于构建web应用程序。包括RESTful风格和Spring MVC,
使用Tomcat作为默认的嵌入式容器
spring-boot-starter-tomcat
用于构建web应用程序。包括RESTful风格和Spring MVC,
使用Tomcat作为默认的嵌入式容器
...
之前需要安装Tomcat服务器,然后将项目打成war包部署到tomcat服务器。
现在只需要在项目中添加maven插件(SpringBoot已经在pom.xml中添加了Maven的打包插件),用Maven package命令把项目打成一个可执行的jar。
然后使用jar -jar 包路径,来启动部署项目。
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
SpringBoot已经内置了Tomcat,在spring-boot-starter-web中引入了Tomcat的启动器,对项目部署进行了抽取封装,简化了部署过程。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<version>2.3.2.RELEASEversion>
<scope>compilescope>
dependency>
SpringBoot的启动类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
首先来分析一下
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@SpringBootConfiguration
@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,
并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Bean
public UserFactory userFactory(){
UserFactory userFactory = new UserFactory();
return userFactory;
}
}
@EnableAutoConfiguration
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
//...
}
@ComponentScan
这个注解是组件扫描,扫描指定的包下的类,并加载符合条件的组件。这个是我们最熟悉的注解,在spring的配置文件中使用过
之前使用SpringMVC 创建web项目导入了大量依赖:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>${jackson-version}version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>${jackson-version}version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>${jackson-version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servlet.jspgroupId>
<artifactId>jsp-apiartifactId>
<version>2.0version>
<scope>providedscope>
dependency>
dependencies>
pom.xml
启动类:
1. @SpringBootApplication:标注这是一个启动类,启动时根据导入的依赖自动加载相关配置类,完成配置,扫描配置类所在包以及子包