目录
Spring Boot 概要
Spring Boot 介绍
随着动态语言的流行(
Ruby
、
Scala
、
Node.js
)
, Java
的开发显得格外的笨重;繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术整合难度大。
在上述环境下,
Spring Boot
由此诞生,它的设计是为了使您能够尽可能快地启动和运行。它使用
“
习惯优于 配置”
(项目中存在大量的配置,而
Spring Boot
内置一个习惯性的配置,让你无须手动进行配置)的理念让 你的项目快速运行起来。使用 Spring Boot
很容易创建一个独立运行(运行
jar
,内嵌
Servlet
容器)、准生产 强力的基于 Spring
框架的项目,使用
Spring Boot
你可以不用或者只需要很少的
Spring
配置。提供了
J2EE开发的一站式解决方案。
其实,说白了就是我们之前做项目,需要用到各种各样的jar包,那么当我们需要使用一个框架场景的时候(比如spring或者mybatis等等)我们要导的包不止一个,各个jar包之间有依赖关系,少了不行,版本不匹配不行,调来调去环境还搭不好你烦不烦,效率低下得很。还有搭好了环境,还需要各种配置文件,web.xml,springmvc.xml,mybatis.xml,巴拉巴拉。那么以上的问题如何解决呢,假如,您现在想开发一个简单的web项目,如果有人提前把你开发需要的jar包全部给你打包好了,你只需要一把拿来用就好,再也不需要想需要什么包,版本匹配不匹配的问题了,甚至别人把大部分的配置都给你配好了,你只需要随便改点小东西就好,你的项目就可以开始业务代码了,是不是很开心。那么这时候,springboot就出来了,以上的事情springboot都帮您做好了,这很符合人类一直以来解放双手的思想。也很符合程序设计的一贯思想,重复的东西,就把它抽出来。
Spring Boot 优点
- 快速构建独立运行的Spring项目;
- 无须依赖外部Servlet容器,应用无需打成WAR包;项目可以打成jar包独自运行;
- 提供 一系列 starter pom 来简化 Maven 的依赖加载;
- 大量的自动配置,对主流开发框架的无配置集成;
- 无须配置XML,开箱即用,简化开发,同时也可以修改默认值来满足特定的需求;
- Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式;
- 极大提高了开发、部署效率。
Spring Boot 入门开发
您需要:
- 熟练 Spring 框架的使用
- 熟练 Maven 依赖管理与项目构建
- 熟练使用 Eclipse 或 IDEA等编译器
环境要求
jdk1.8
(Spring Boot
推荐
jdk1.8
及以上
)
:
java version "1.8.0_151"
Maven 3.x
(maven 3.2
以上版本
)
:
Apache Maven 3.3.9
IntelliJ IDEA
:
IntelliJ IDEA 2018.2.2 x64
SpringBoot
使用稳定版本
修改Maven配置文件
在 Maven 安装目录下的 settings.xml 配置文件中, 添加如下配置:
#自己的maven本地仓库
<localRepository>D:\JAVA\maven-repository</localRepository>
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
IntelliJ IDEA 设置
打开setting
快速构建 Spring Boot 项目
需求:浏览器发送
/hello
请求,服务器接受请求并处理,响应
Hello World
字符串
分析 :构建
Spring Boot
项目,事实上建立的就是一个
Maven
项目
创建 Maven工程
在
IDEA
上新建一个空的
jar
类型 的
maven
工程
修改pom.xml
<!--
spring-boot-starter-parent : 是当前项目的父依赖
spring-boot-starter-parent 继承 spring-boot-dependencies
spring-boot-dependencies 里面定义了很多组件版本号,我们引用对应依赖时,不需要写<version>标签
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<!--spring-boot-starter-web
spring-boot-starter-web
spring-boot-starter : 它是SpringBoot的场景启动器,它针对不同场景定义了很多不同的场景启动器,
你的项目需要使用哪些场景启动器,则直接依赖对应的启动器就可以了.
-->
<!--spring-boot-starter-web 构建WEb项目, 比如:tomcat springmvc-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
可以发现我们的项目中多了很多的jar包
创建一个控制器Controller
package com.haogenmin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "hello,World!";
}
}
创建一个引导类
引导类是启动springboot项目的入口,其实就是main函数。
package com.haogenmin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloAppliation {
public static void main(String[] args) {
SpringApplication.run(HelloAppliation.class, args);
}
}
运行一下
项目打包
在
pom.xml
添加如下插件后, 将这个工程打成
jar
包后,可直接通过
java -jar
的命令运行
<!--可以将当前项目打成一个jar包进行运行-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
再次访问,运行正常。
分析pom文件及启动过程
pom文件
- spring-boot-starter-parent 是当前项目的父级依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
spring-boot-starter
: Spring Boot
场景启动器,
Spring Boot
将所有的功能场景抽取出来,做成一个个的
starters
(
启动器
),只需项目里引入相关场景的
starter
, 就会将它所有依赖导入进来。要用什么功能
就导入什么场景的启动器。(各种启动器可参见官方文档
starter
)
比如这里是web开发的启动器,里面就包含了web开发的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我们进入这个启动器看一看,发现里面有这些依赖,这也就明白了为什么加一个启动器就可以使用springmvc,使用json,使用tomcat了。全部已经打包好了。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.0.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.3.0.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.3.0.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
spring-boot-starter-parent
:它父依赖
spring-boot-dependencies
,参见下面:
可以发现spring-boot-dependencies里面有很多的版本号,这是为了解决自己导入依赖的时候,版本不匹配的问题,springboot把相互匹配的版本号全部设定好了,完全不需要开发人员去关心。
当前没有在
dependencies
里
面管理的依赖自然需要声明版本号。
引导类
package com.haogenmin.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootHelloApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootHelloApplication.class, args);
}
}
通常有一个名为
*Application
的入口 类,里面定义一个
main
方法,使用 SpringApplication.run(HelloMailAppliation.class, args); 来启动
SpringBoot
应用项目。
@SpringBootApplication
注解主要组合了
@SpringBootConfifiguration
、
@EnableAutoConfifiguration
、 @ComponentScan
如下:
@SpringBootApplication
注解说明:
标注在某个类上, 说明这个类是
Spring Boot
的引导类,
Spring Boot
就应该运行这个类的
main
方法来
启动
SpringBoot
应用;
@SpringBootApplication 包含的三个注解解析:
- @SpringBootConfifiguration:用于定义一个Spring Boot的配置类( 配置类 等同 配置文件)
- 引用了 @Confifiguration 注解,是Spring底层的一个注解,用于定义 Spring 的配置类。
- 配置类也是容器中的一个组件 @Component。
-
@EnableAutoConfifiguration :告诉 Spring Boot 开启自动配置功能,这样 Spring Boot 会自动根据你导入的依赖jar包来自动配置项目。
1、@AutoConfifigurationPackage包含@Import(AutoConfigurationPackages.Registrar.class)
这个注解的作用是会将引导类(@SpringBootApplication标注的类)所在的包及下面所有子包里面的所有组件扫描到Spring容器;
2、@Import(AutoConfigurationImportSelector.class)
这个注解的作用是
(1)将所有需要导入的组件以全类名的方式返回; 这些组件就会被添加到容器中。
(2)会给容器导入非常多的自动配置类(xxxxAutoConfifiguration),就是导入并配置好当前项目中所需要的组件,省去我们手动编写配
置去注入组件。
我们进去看一看源码:
我们点进去看一看加载的到底是哪一些自动配置类:
OK,那我们就找到加载路径了,我们打开瞅一眼(由于换了一台电脑,这里用的是Eclipse编译器)右边就是加载的配置类。
Spring Boot
在启动的时候从
(
spring-boot-autocon?gure-2.0.6.RELEASE.jar
)
类路径下的
META-INF/spring.factories中获取
EnableAutoCon?guration
指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;
以前我们需要自己配置的文件,自动配置类都帮我们完成了;
@ComponentScan
:该注解标识的类
,
会被
Spring
自动扫描并且装入
bean
容器。
如果您觉得对您的学习有帮助,那就点个赞,感谢~