一、架构演变
单体架构 -> 集群架构 -> 垂直化 -> 服务化(SOA) -> 微服务
微服务特点:
- 分布性
- 远程通信
- 服务注册中心
二、什么是spring cloud?
- spring cloud生态:提供了快速构建微服务技术组件
- 创建spring boot应用的时候会自动给出可选的版本,开发者无需关心版本信息
1. 第三方组件Netflix
- eureka
- hystrix
- ribbon
- feign
2. 阿里巴巴组件
- nacos
- sentinel
- seata
- roketmq
- dubbo
3. spring cloud Hoxton(bom)
bom清单,记录所以组件版本号
4.spring boot与spring cloud的关系
- 版本兼容性有对应关系
三、spring boot前世今生
- Spring Framework(Spring框架) AOP、IOC/DI
- 万能胶
- 如何配置进行轻量化
思考:用springmvc去构建一个web项目
- 创建一个项目结构(maven/gradle)
- spring的依赖,spring mvc、servlet api的依赖
- web.xml,DispatcherServlet
- 启动一个Spring mvc配置,Deispatcher-servlet.xml,
<context:component-scan=""/>,<mvc:annotation-driven/> - 创建一个Controller 发布一个http请求
- 发布到jsp/servlet容器
通用模板,脚手架工程
Spring的产生
- 2012
- 2013:2014发布1.0版本
到底什么是Spring Boot
- 约定优于配置理念下的一个产物
- 只依赖spring-boot-starter-web的jar
- Spring Framework的脚手架
四、约定优于配置
- ComponentScan("com.xxx.xxx") 智能扫描Spring 的注解
- MapperScan("com.xx.xxx") 扫描mybatis注解
五、spring boot如何应用,集成MyBatis
- application.properties配置数据源
- entity
- mapper
- mapper.xml (可以MyBatis在线生成器工具)
- spring boot扫描特性,默认扫描当前类以及同级目录和子目录的注解
- @ComponentScan("com.xxx.controller"):扫描Spring的注解
- @MapperScan("com.xxx.dao.mappers):扫描mybatis注解@Mapper
六、spring boot和微服务
- 所以微服务组件,都集成在spring boot之上
- spring cloud版本的时候,他和spring boot版本兼容性
- Spring boot是微服务应用的基础框架
七、spring boot的特性
- EnableAutoConfiguration (自动装配)
- Starter (启动依赖) ,依赖自动装配的技术
- Actuator (监控),提供了一些endpoint,http、jmx形式去访问,health信息。metrics信息。。。
- Spring Boot CLI(命令行操作的功能,groovy脚本)客户端groovy
八、spring注解驱动发展过程
Spring Framework的注解驱动的发展历史
Spring 1.x
IOC的功能,配置重量级,难维护
<bean name="helloService" class="com.xxx.service.IHelloService" />
Spring2.x阶段
@Required/@Repository(Dao)/@Aspect
spring 2.5
- @Component
- @Service
- @Controller
- @RequestMapping
配置文件增加扫描配置即可,不需要配置每个类
<context:component-scan base-package="com.xxx.service" />
spring 3.x版本
@Configuration去xml化@ComponentScan取代标签<context:component-scan base-package="com.xxx.service" />
核心目的是:把bean对象如何更加便捷的方式加载到Spring IOC容器中
方式一 @Service、@ComponentScan、AnnotationConfigApplicationContext.class
- @Service:定义被Spring托管
- @ComponentScan:负责扫描@Service/@Repository/@Controller等去xml化
- AnnotationConfigApplicationContext.class:上下文获取托管的类
测试
方式二 @Configuration、@Bean、AnnotationConfigApplicationContext.class
- @Configuration:配置类声明
- @Bean:要托管到IOC容器类声明
- AnnotationConfigApplicationContext.class:上下文获取托管的类
多个@Configuration配置如何加载
1. 不灵活的多配置文件加载
2. 灵活加载@Import()
Enable驱动模块
Spring3.x版本中,集成Redis或者mybatis
- 创建一个配置类
- @bean注解来声明一个bean
@Bean
DefaultKaptcha defaultKaptcha() {
}
- @Enable启动一个模块,把相关组件的bean自动装配到IOC容器中
- xml方式
- 注解方式