简介
背景
J2EE笨重的开发 / 繁多的配置 / 低下的开发效率 / 复杂的部署流程 / 第三方技术集成难度大
特点
① 快速创建独立运行的spring项目以及主流框架集成
② 使用嵌入式的Servlet容器, 应用无需达成war包
③ starters自动依赖和版本控制
④ 大量自动配置, 简化开发, 也可修改默认值
⑤ 无需配置xml文件, 无代码生成, 开箱即用
⑥ 准生产环境的运行时应用监控
⑦ 与云计算的天然集成
微服务
推荐martinfowler的一篇博客译文: http://blog.cuicc.com/blog/2015/07/22/microservices/
微服务是一种架构风格, 一个应用应该是一组小型服务, 可以通过http的方式进行互通.
以前的架构: 单体应用(ALL IN ONE)
微服务(Microservices): 每一个服务都是可替代可升级的软件单元
每个服务之间通过http进行通信:
准备工作
JDK1.8
maven3.3.9
IDEA_2018
配置指定maven的全局JDK版本: 在setting.xml文件中的<profiles></profiles>标签中
第一个例子
① 创建一个maven工程(jar)
② 导入spring boot相关的依赖
③ 编写一个主程序, 启动Spring Boot应用
④ 编写相关的Controller
⑤ 运行主程序测试, 访问: http://localhost:8080/hello
⑥ 简化部署(使用插件打成jar, 插件在pom文件中已给出)
探究
① pom文件
父项目:
再依赖父项目:
管理Spring Boot的所有依赖版本: 导入依赖默认是不需要写上版本的(没有在dependencies管理中的除外)
② 导入的依赖
spring-boot-starter: Spring Boot的场景启动器
spring-boot-starter-web: 帮我们导入了web模块正常运行所依赖的组件
Spring Boot将所有的功能场景都抽取出来, 做成一个个的starter(启动器), 只需要在项目中引入这些starter, 要用哪个功能就导入具体的starter即可.
③ 主程序类/主入口类
@SpringBootApplication注解, 该注解所标准的类即为SpringBoot的主配置类
@SpringBootConfiguration
@Configuration: 配置类上的注解
@Component: 组件注解
配置类: 同配置文件的作用, 也是容器的组件.
@EbableAutoConfiguration: 开启自动注解功能
@AutoConfigurationPackage: 自动配置包(自动导包)
@Import({Registrar.class}): Spring的底层注解, 给容器中导入一个组件
将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包的所有组件都扫描到容器中
@Import({ AutoConfigurationImportSelector.class}): 导入具体组件的选择器
将所有需要导入的组件以全类名的方式返回, 这些组件就会被添加到容器中.
会给容器中导入非常多的自动配置类(xxxAutoConfiguration): 给容器中导入这个场景需要组件并配置好这些组件.
有了自动配置类, 免去了手动编写配置注入功能组件的工作.
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, ClassLoader);
该方法从文件"META-INF/spring.factories"中获取自动配置的类信息.
小结: SpringBoot在启动时从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值, 将这些值作为自动配置类导入到容器中, 自动配置类就会生效, 进行自动配置工作, 所以并不是不需要进行以前的配置, 只是这些配置都由SpringBoot帮我们完成了. J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
使用Spring Initializr快速创建SpringBoot项目(需要联网)
① 选择Spring Initializr
② 填写信息
③ 需要哪个模块勾选哪个即可
④ next->finish
⑤ resources文件夹中的目录结构
static文件夹: 保存所有的静态资源(js, css...);
templates文件夹: 保存所有的模板页面(由于SpringBoot使用嵌入式的tomcat, 所以默认不支持jsp), 可以使用模板引擎 (freemarker/ thymeleaf)
application.properties: SpringBoot应用的配置文件(可以修改一些默认的设置)