简介
- 简化Spring应用开发的一个框架
- 整个Spring技术站的一个大整合
- J2EE开发的一站式解决方案
微服务
- 微服务:架构风格
- 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通
- 每一个功能元素最终都是一个可以独立替换和独立升级的软件单元
基本配置
- pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 这个插件可以将应用打包成一个可执行的jar包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 编写一个主程序
/**
* @SpringBootApplication : 标注一个主程序类,说明是一个boot应用
*/
@SpringBootApplication
public class HelloWord {
public static void main(String[] args) {
SpringApplication.run(HelloWord.class,args);
}
}
- 控制器类
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
- 启动main程序即可,你甚至不用配置Tomcat
依赖详解
- 父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<!-- 该父项目也有父项目 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
<!-- 爷爷项目真正管理SpringBoot应用里的所有依赖版本 -->
- spring-boot-starter-web
<!-- starter:spring-boot场景启动器 -->
<!--
1. -web :帮我们导入了web模块正常运行所依赖的组件
2. Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器)
3. 要用什么功能就导入什么场景的启动器
-->
主程序类,主入口类
@SpringBootApplication :spring Boot应用标注在某个类上,说明这个类是SpringBoot的主配置类,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 {
- @SpringBootConfiguration
- 这是一个springboot的配置类(配置文件,也是容器的一个组件 @Component)
- Configuration:配置类上来标注这个注解
- @EnableAutoConfiguration: 开启自动配置功能
将主配置类(@SpringBootApplication)的所在包及下面所有子包里面的所有组件扫描到Spring容器
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage : 自动配置包
/*
1. @Import(AutoConfigurationPackages.Registrar.class)
2. Spring的底层注解@Import,给容器中导入一个组件
3. 导入的组件由AutoConfigurationPackages.Registrar.class决定
4. 将主配置类(@SpringBootApplication)的所在包及下面所有子包里面的所有组件扫描到Spring容器
5. (@Controller、@Service....)
*/
@Import(EnableAutoConfigurationImportSelector.class)
/*
1. 给容器中导入组件
2. EnableAutoConfigurationImportSelector:导入哪些组建的选择器
3. 将所有导入的组件以全类名的方式返回
4. 会给容器中倒入非常多的自动配置类(xxxAutoConfiguration)
5. 就是给容器中导入这个场景的所有组件并配置到这些组件
6. (Mq,redis..)
7. 主要方法SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)
8. Spring Boot在启动的时候从"META-INF/spring.factories"中获取EnableAutoConfiguration指定的值(相当于properties)
9. J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
*/
IDEA快速启动
- 正常输入相关信息,并选择要添加的模块启动成功
- 项目结构
- static:保存所有的静态资源;js css images;
- templates:保存所有的模块页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf)
- application.properties:Spring Boot应用的配置文件,可以修改一些默认配置(如:server.port=8081)