SpringBoot_入门案例分析

文章目录

    • 4. 入门案例分析
        • 4.1. 父工程
        • 4.2. 启动器
          • 4.2.1. 没有starter整合的问题
          • 4.2.2. 使用starter的好处
        • 4.3. 部署插件
          • 4.3.1. 简化项目部署
          • 4.3.2. 打包部署原理
        • 4.4. 主函数
          • 4.4.1. @SpringBootApplication
        • 总结:

4. 入门案例分析

前面的Web项目没有发现任何XML配置,直接编写controller即可进行web功能开发,非常方便,原因何在?

关键点就在pom.xml的配置,下面来分析一下pom.xml的内容:

4.1. 父工程

父工程已经集成大量的框架依赖,解决了依赖包版本冲突问题

<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>

4.2. 启动器

Web项目环境使用SpringBoot只导入了一个依赖

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>

这里就需要介绍一下导入的这个依赖

这个依赖的项目名:spring-boot-starter-web

项目名需要拆为2部分来理解

  1. spring-boot-starter:
    • Spring官方的命名模式,启动器,SpringBoot中提出的一种概念,是一组方便的依赖描述符。是对所需的Spring和相关技术进行的整合。
    • 可以在应用程序中继承这些启动器,这样就无需搜索和复制粘贴每个相关依赖了
  2. web:启动器名称
4.2.1. 没有starter整合的问题

没用starter之前整合Spring MVC的步骤:

  1. 引入web mvc相关的依赖

  2. 引入spring相关的依赖

  3. 在web.xml中配置spring MVC

  4. 在springmvc.xml中配置注解扫描、视图解析器…

下次新建spring整合springMVC的项目的时候,还需要重复的做一次。这样做有几个问题:

  1. 过程比较繁琐,这样一步步操作会增加出错的可能性
  2. 不停地copy&paste都是重复性操作
4.2.2. 使用starter的好处

使用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作为默认的嵌入式容器
...

4.3. 部署插件

4.3.1. 简化项目部署

之前需要安装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>
  1. 打包项目
    SpringBoot_入门案例分析_第1张图片
  2. 运行项目
    使用java -jar [package_path],运行项目jar包
    SpringBoot_入门案例分析_第2张图片
  3. 浏览器测试
    http://localhost:8080/hello
4.3.2. 打包部署原理

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>

4.4. 主函数

SpringBoot的启动类

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}
4.4.1. @SpringBootApplication

首先来分析一下

@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 {
    	//...
    }
    
    • @AutoConfigurationPackage :将添加该注解的类所在的package,作为 自动配置package进行管理。
    • @Import({AutoConfigurationImportSelector.class}):确定引入哪些配置
  • @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. 父工程帮我们管理了依赖版本,处理了依赖直接的冲突
  2. 依赖的web启动器:web启动器集成了web环境需要的依赖包,简化web项目的创建
  3. 打包插件:可以将项目打成jar包部署,springboot内容了tomcat,简化部署

启动类:

​ 1. @SpringBootApplication:标注这是一个启动类,启动时根据导入的依赖自动加载相关配置类,完成配置,扫描配置类所在包以及子包

你可能感兴趣的:(SpringBoot,SpringBoot)