1. SpringBoot简介
Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。SpringBoot是对Spring应用开发的简化框架,整合了整个spring技术栈,是J2EE一站式开发的解决方案。
2. 微服务
使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且他们可以通过自动化方式部署。
微服务特征:单一职责,轻量级通讯,隔离性,业务数据独立,技术多样性。
微服务诞生背景:互联网的快速发展,敏捷开发,精益方法,容器技术的成熟。
3. 环境搭建
jdk、maven、springboot依赖、ieda
pom文件:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 插件可将应用打包成可执行的jar包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
4. 编写一个HelloWorld
4.1 首先编写一个主程序:启动SpringBoot应用
/**
* @SpringBootApplication 标注一个主程序类,声明这是一个springboot 应用
*/
@SpringBootApplication
public class HelloWorldMain {
public static void main(String[] args) {
SpringApplication.run(HelloWorldMain.class,args);
}
}
4.2 编写一个controller
@Controller
public class HelloController {
@ResponseBody
@RequestMapping(value ="/hello")
public String hello(){
return "Hello World!";
}
}
4.3 测试访问
将主程序启动,在浏览器输入localhost:8080/hello
浏览器显示Hello World!
5. SpringBoot项目探究
5.1 pom文件
5.11 父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
下面项目是上面的父项目,实际是由它来管理SpringBoot应用中的所有依赖的版本
这是SpringBoot的版本仲裁中心,因此以后导入的依赖默认是不需要标明版本号的(不在dependencies里面管理的依赖除外 )
5.12 导入的依赖(启动器)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
依赖spring-boot-starter-web可以分为两部分来看:starter和web
starter:spring-boot的场景启动器;导入web模块正常运行所依赖的组件;
注:SpringBoot将所有的功能场景都抽取出来,做成相对应的启动器starter,只需要在项目中引入starter,相关场景的依赖就可以自动导入。因此,需要什么功能,只需要导入对应的启动器即可。
5.2 主程序类
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
//启动SpringBoot应用
SpringApplication.run(MainApplication.class,args);
}
}
@SpringBootApplication:标注在SpringBoot的主配置类上,通过启动该类的main方法来启动SpringBoot应用;这是一个组合注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
5.2.1 @SpringBootConfiguration:SpringBoot的配置类,标注在某个类上,表示这是一个SpringBoot配置类
@configuration:配置类注解;配置类-----配置文件,配置类也是容器中的一个组件;@component
5.2.2 @EnableAutoConfiguration:开启自动配置功能;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
@AutoConfigurationPackage:自动配置包
@Import(AutoConfigurationPackage.Registrar.class):spring底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackage.Registrar.class决定
将主配置类(@SpringBootApplication标注的类)所在包及子包中的所有组件扫描到spring容器中
@Import(EnableAutoConfigurationImportSelector.class):给容器中导入组件
EnableAutoConfigurationImportSelector:导入哪些组件的选择器
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;
会给容器中导入非常多的自动配置类(xxxAutoConfiguration):就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
6. 快速搭建项目
6.1 IEDA
新建项目→spring Initializr.......
6.2 Eclipse
新建项目→spring starter project→(如果报错,将http://start.spring.io/改成https://start.spring.io/)。。。。。