1 使用Spring Boot2.x开发项目
1.1 Spring核心基础
- 面向对象编程
1.面向对象开发就是不断的创建对象,使用对象,指挥对象做事情
2.面向对象设计就是在管理和维护对象之间的关系
- Spring框架解决了什么问题?
1.Spring 提出了一个很核心的概念—Spring IOC容器
2.我们实际上是通过Spring IOC的一个容器来进行所有的Bean的管理,通过这种Bean的管理,使得解放出来,使得我们可以专注于写业务代码,而不是不停的new对象
3.Spring框架是为了解决应用企业开发的复杂性而创建的
- Spring框架核心
1.Spring Boot + Spring Cloud + Spring Cloud Data Flow
2.Spring Boot2.0 两种开发方式 Reactive Stack and Servlet Stack
1.1.1 Spring IOC
- 什么是Spring IOC?
1.一个系统需要生成多个对象,并且这些对象都需要管理
2.IOC -Inversion of Control 即 ’控制反转‘ ,是一种设计思想。在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接new控制
- 依赖注入(Dependency Inversion)
1.以玩具汽车为例子 原始方法:从上往下,先设计汽车轮胎,再设计汽车底盘(依赖于汽车轮胎),最后设计汽车车架(依赖于汽车底盘),当要修改汽车轮胎的尺寸时候,那些依赖的部件都需要改变
2.使用依赖注入实现控制反转,即上层控制下层,将依赖部分逐渐注入被依赖的部分。依赖注入的时候,直接注入的是对象,而不是参数
3.依赖注入 是将底层类作为参数传递给上层类,实现上对下的控制
- Spring IOC容器
1.Bean: 在Spring中,管对象叫做Spring Bean
2.Spring IOC首先是依赖于配置信息,最常用的是通过注解的方式来配置Bean的一些具体信息
3.将Bean的配置信息通过注解的方式,或者xml或者其他的方式进行配置,配置完成以后,当Spring容器在启动的时候,会读取bean的一些配置信息,然后加载到了一个大容器里面(Bean定义注册表),根据注册表来实例化每一个对象,之后将Bean实例放到Spring容器中(Bean的缓存池),当需要用的时候,直接从缓存池中取出来即可
4.Spring IOC容器是如何实现的,有两个对应的接口:a.BeanFactory接口的简单容器 b.ApplicationContext应用上下文
1.1.2 Spring Bean
如何在Spring中定义和注入Spring bean?
- Spring bean的使用方法
定义bean
@Component Spring基础的注解,被Spring管理的组件或bean
@Repository 用于持久层,数据库访问层,是用来直接访问数据库的
@Service 用于服务层,处理业务逻辑
@Controller 用于呈现层,(Spring-MVC),暴露给前端的入口
注入bean
@Autowired 默认是按照资源的类型class查找并注入的
@Resource 默认是按照资源的名称name查找并注入的
@Qualifier 采用@Autowired如果存在多个实现类的情况下,@Qualifier注解通过资源名称确定唯一性
- Bean的作用域
spring中默认所有的bean都是作为单例(singleton)的形式创建的。不管bean被注入到其他的bean多少次,每次注入的都是同一个实例。
| 作用域类型 | 使用范围 | 作用域描述 |
|---|---|---|
| singleton | 所有Spring应用 | 默认值,IOC容器值存在单例 |
| prototype | 所有Spring应用 | 每当从IOC容器中取出一个 bean,则创建一个新的bean |
| session | Spring Web应用 | HTTP会话 |
| application | Spring Web应用 | Web工厂生命周期 |
| request | Spring Web应用 | Web工程单次请求(request) |
| globalSession | Spring Web应用 | 在一个全局的Http Session中,一个Bean定义对应一个实例。实践中基本不使用 |
- Spring bean的加载过程
转换为BeanName ----- 从缓存中加载实例 ----- 实例化bean ----- 检查parentBeanFactory -------初始化依赖的bean ---- 创建bean
1.1.3 Spring 约定编程
- 约定编程就是将内容织入到约定的流程中。
1.你需要记住约定的流程是什么?
2.然后完成对应的编码任务
3.你不需要知道底层设计者是怎么样将约定的内容植入对应的流程
1.目标对象:即被代理对象
2.连接点: 被拦截的对象(方法)------图中的 连接(runCar)
3.切面: 定义切点 各类通知和引入的内容(拦截器)
4.切点: 使用正则表达式和指示器规则去匹配多个类的不同方法
5.通知:按照约定的流程下的方法
------------前置通知 后置通知 环绕通知 事后返回通知 异常通知
6.织入:通过动态代理技术,为原有服务对象生成代理对象,然后将与切点定义匹配的连接点拦截,并按照约定将各类通知织入约定流程的过程
- 只要按照一定的约定规则编程以后,就可以把自己的代码织入约定的流程中
1.1.4 Spring AOP
- Spring AOP本质就是通过我们的约定,把对应的方法通过动态代理织入到约定的流程中
1.2 Docker构建环境
- Docker的思想来自于集装箱,集装箱解决了什么问题?
Docker: 代码集装箱装卸工
Docker 提供了可将任何需要运送的代码进行封装,转移,管理的标准化工具
所有的软件交付工具,开发,测试,持续集成,部署,版本管理,运行环境,人员技能都按照docker进行统一
Docker就是操作系统级别的虚拟化方案
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器
- Docker容器和虚拟机有什么区别?
1.启动级别不在一个数量级上,秒级别和分级别
2.docker直接使用的是硬件资源(Docker Engine)VM还要中间过渡 在资源利用率下,Docker是占有有优势的
3.docker利用的是系统的内核,直接加载libs和bins,而vm还需要安装操作系统
- Docker的基本组成?
1.Docker镜像就像是一个只读的模板,用来创建Docker容器。(包含一个操作系统和一个mysql)
2.Docker利用容器来运行应用,容器是从镜像创建的运行实例。
3.仓库是集中存放的镜像文件的场所