微服务阶段
JavaSE:OOP
MySQL:持久化
HTML+CSS+JS+jQuery+框架:视图,框架不熟练,CSS不好
Javaweb:独立开发MVC三层架构的网站了:原始
ssm:框架:筒化了我们的开发流程,配置也开始较为复杂
war: tomcat运行
Spring再简化: Spring Boot-jar:内嵌 tomcat;微服务架构!
服务越来越多: spring cloud
Spring Boot快速入门
什么是Spring
Spring是一个开源框架,2003年兴起的一个轻量级的Java开发框架,作者: Rod Johnson
Spring是为了解決企业级应用开发的复杂性而创建的,简化开发。
Spring是如何简化Java开发的
为了降低Java开发的复杂性, Spring采用了以下4种关键策略
1、基于POJO的轻量级和最小侵入性编程
2、通过IOC,依赖注入(DI)和面向接口实现松耦合
3、基于切面(AOP)和惯例进行声明式编程
4、通过切面和模版减少样式代码
什么是Spring Boot
约定大于配置(maven、spring、springmvc、spring boot)
Spring Boot的主要优点
- 为所有 Spring开发者更快的入门
- 开箱即用,提供各种默认配置来简化项目配置
- 内嵌式容器简化Web项目
- 没有冗余代码生成和XML配置的要求
微服务
什么是微服务
微服务是一种架构风格,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合:可以通过http的方式进行互通。要说微服务架构,先得说说过去我们的单体应用架构。
单体应用架构
所谓单体应用架构( all in one)是指,我们将一个应用的中的所有应用服务都封装在一个应用中。
无论是ERP、CRM或是其他什么系统,你都把数据库访回,Web访问,等等各个功能放到一个war包内。
- 这样做的好处是,易于开发和测试;也十分方便部署;当需要扩展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了。
- 单体应用架构的缺点是,哪怕我要修改一个非常小的地方,我都需要停掉整个服务,重新打包、部署这个应用war包。特别是对于一个大型应用,我们不可能把所有内容都放在一个应用里面,我们如何维护、如何分工合作都是问题。
微服务架构
all in one 的架构方式,我们把所有的功能单元放在一个应用里面。然后我们把整个应用部署到服务器上。如果负载能力不行,我们将整个应用进行水平复制,进行扩展,然后在负载均衡。
所谓微服务架构,就是打破之前 all in one的架构方式,把每个功能元素独立出来。把独立出来的功能元素的动态组合,需要的功能元素オ去拿来组合,需要多一些时可以整合多个功能元素。所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制.
这样做的好处是:
- 节省了调用资源
- 每个功能元素的服务都是一个可替换的、可独立升级的软件代码
第一个Spring Boot程序
- jdk1.8
- maven 3.6.1
- springboot:最新版
- IDEA
官方:提供了一个快速生成的网站!IDEA集成了这个网站!
- 可以在官网直接下载后,导入idea开发(官网在哪)
- 直接使用dea创建一个 springboot项目(一般开发直接在DEA中创建)
原理初探
自动配置
pom. xml
- spring-boot- dependencies:核心依赖在父工程中
- 我们在写或者引入一些 Springbootf依赖的时候,不需要指定版本,就因为有这些版本仓库
启动器
-
<!-- 启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
-
启动器:说白了就是 Springboote的启动场景
-
比如 Spring- boot-starter-web,他就会帮我们自动导入Web环境所有的依赖!
-
springboot会将所有的功能场景,都变成一个个的启动器
-
我们要使用什么功能,就只需要找到对应的启动器就可以了
starter
主程序
//@SpringBootApplication:标注这是一个spring boot 的应用
@SpringBootApplication
public class DemoApplication {
//将Spring Boot应用启动
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 注解
@SpringBootConfiguration:springboot的配置
@Configuration:spring配置类
@Component:说明这也是一个spring的组件
@EnableAutoConfiguration:自动配置
@AutoConfigurationPackage:自动配置包
@Import({
Registrar.class}):自动配置包注册
@Import({
AutoConfigurationImportSelector.class}):自动配置导入选择
获取候选的配置
META-INF/ spring.factories:自动配置的核心文件
结论: springbootf所有自动配置都是在启动的时扫描并加载: spring.factories
所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的 start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功!
- springboot在启动的时候,从类路径下/META-INF/ spring. factories获取指定的值;
- 将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置;
- 以前我们需要自动配置的东西,现在 springboot帮我们做了;
- 整合javaEE,解决方案和自动配置的东西都在 spring