SpringBoot入门
1.1 Spring的简介
简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;
优点:快速创建独立运行的spring项目以及于主流框架集成
使用嵌入式的Servlet容器,应用无需打成war包
Starters自动依赖和版本控制
大量的自动装配,简化开发,也可以修改默认值
无需配置XML无代码生成开箱即用
准生产环境的运行时应用监控
与云计算的天然集成
1.2 微服务(SpringBoot的脚手架)
SpringCloud是一个微服务的治理方案
微服务:架构风格(服务微化)
1.3 环境准备
1.3.1 maven的设置
在maven文件夹下的config目录下的settings.xml中加入以下代码
<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>
在IDEA中setings的设置中maven的配置中勾选更改后的settings.xml文件
1.3.2 创建第一个SpringBoot的项目
1. 创建一个maven项目(不勾选任何模板)
2.在pom.xml中导入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>
</dependencies>
3.创建相应的文件结构
4.在qcby包下创建HelloWorldMainApplication类
/**
* 声明一个类为SpringBoot启动类
* @SpringBootApplication 标注一个主程序类,说明这是一个SpringBoot的应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
5.启动SpringBoot的主程序
在浏览器地址栏中输入请求地址
如果找不到页面就在resources文件下创建application.properties,文件中输入
server.port=8081
或者在resources文件下创建application.yml,文件中输入
server: port: 8081
请求路径的端口号改为8081在进行访问。
1.3.3 SpringBoot项目的探究
依赖探究
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
这个依赖就是一个工具包里面有SpringBoot的web模块所需要的所有东西,而且不用关注版本,版本会进行统一的管理。
在spring-boot-starter-web中的spring-boot-parent中的spring-boot-dependencies中有一个专门的properties进行版本管理
在Spring中我们将类交给Spring管理是需要一个xml配置文件,在配置文件中设置我们要扫描的包,然后在要交给Spring管理的类中加@Service、@Controller、@Component的注解,就能被扫描到。
SpringBoot是没有xml配置文件的,这时如果想将类交给Spring去管理就需要创建配置类
创建一个Car的接口
public interface Car { public void print(); }
创建一个BMW的接口
@Component
public class BMW implements Car {
@Override
public void print() {
System.out.println("我是宝马汽车!!!");
}
}
创建一个Java ConfigA的配置类
@Configuration
public class JavaConfigA {
@Bean("BMW")
public Car getBMW(){
return new BMW();
}
}
就是将BMW类的创建权力交给了Spring,@Configuration配置类的注解
@Bean("BMW")
将类交给Spring管理两种方式
加一个扫描器,或者加@Bean
但是如果我创建的配置类太多了怎么办,可以创建一个父类导入所有的配置类
@Configuration
@Import({JavaConfigA.class,JavaConfigB.class}) public class ParentConfig { }
SpringBoot只有一个简单的yml配置文件,是如何做到扫描Controller类?
是因为有启动类
启动类是配置类吗?
是
为什么是配置类?
在@SpringBootApplication中有一个@SpringBootConfiguration中有一个@Configuration
创建SpringBoot时的Stater去哪里找?
去Spring官网去找,在Spring官网的各个版本的使用文档中能找到‘SpringBoot的各个stater。原来使用文档里是由pom文件的,但是现在没有了,可以将starter的名复制去maven的中央仓库去找
org.springframework.bootspring‐boot‐starter‐parent1.5.9.RELEASE
他的父项目是
org.springframework.bootspring‐boot‐dependencies1.5.9.RELEASE../../spring‐boot‐dependencies
他来真正管理Spring Boot应用里面的所有依赖版本;
Spring Boot的版本仲裁中心;以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的
依赖自然需要声明版本号)
spring-boot-starter-web:
spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
为什么启动类一启动就能生成这些?
让我们来看一下run方法的源码,在源码中找到这个方法,然后打断点,然后debug,到这个位置,右键计算公式,我们可以看到,这个方法把我们所有初始化东西都加载出来了
在我们导入的starter中有很多东西,我们会通过一个EnableAutoConfigurationImportSelector.class类去进行选择,这里就不多说了。
1.3.4 打包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
这是一个打包的插件,在plugins中我们可以点package或者install,这样就能在target目录下产生一个jar包