【笔记】Spring是什么

什么是spring?

Spring的基础知识铺垫

IOC AOP<-Spring->容器->生态

先说你的认知,总-分结构
spring是一个基础的框架,同时提供了Bean的容器,用来方便装载具体的Bean对象,之前在使用对象的时候必须自己new,而现在只要告诉容器有哪些对象他会帮我们创建好,并且维护好整个的生命周期。我们在spring的基础上还有SpringBoot、SpringCloud都是在此基础上。
分:
1、什么是IOC?什么是AOP?
IOC表示控制反转,原来我们需要自己去创建对象,并且交由容器去管理控制对象,AOP表示面向切面编程,跟业务逻辑无关的代码能通过AOP来实现,比如说工作中的日志、事务管理都是通过AOP来实现的。也就是说具体的业务逻辑不变,扩展的时候通过AOP的声明通知、具体方法的前置后置Around等添加与业务无关的代码。
2、IOC、AOP如何实现?生命周期、循环依赖?

Spring加载注解和配置文件概述

1、Spring容器简介

Spring中有一个容器,容器中间有多个map对象
【笔记】Spring是什么_第1张图片

2、Spring加载注解和配置文件

spring源码的xml与注解转换成了BeanDefinition对象

【笔记】Spring是什么_第2张图片

3、在此中间考虑了扩展性,增加了接口 约束规范

BeanDefinitionReader,只要实现了这个接口就不限于xml、注解、还能增加properties等等去实现bean的定义信息
【笔记】Spring是什么_第3张图片
(题外话)抽象类与接口的区别
抽象是自下向上,接口是自上向下
【笔记】Spring是什么_第4张图片

4、spring的扩展接口-BeanFactoryPostProcessor

首先要从BeanDefiniton直接到创建Bean对象,首先想到的思路是反射。
反射
1、获取对象Class clazz=class.forName
2、获取构造器Constructor ctor=clazz.getDeclareConstructor()
3、创建对象
ctor.newInstance()
【笔记】Spring是什么_第5张图片
但是,理论上直接BeanDefiniton通过反射创建Bean对象,不就能解决问题了吗?别着急,上面图片中的xml文件的property属性中有若干占位符需要替换进去,需要解决这个问题,就不能直接用反射
当我们要创建BeanDefinition后,创建bean对象之前,需要替换jdbc.username这些参数,需要PostProcessor(增强器,提供某些额外的扩展功能)
【笔记】Spring是什么_第6张图片
上面说的针对的操作对象不同:
BeanFactory代表访问Spring Bean容器的根接口
Bean代表对象
【笔记】Spring是什么_第7张图片
postProcessor处理了占位符,比如刚刚说的jdbc.username,生成完整的BeanDefinition对象
【笔记】Spring是什么_第8张图片

5、Bean的生命周期

从对象的创建到销毁的过程,粗略来说就是Bean对象的创建、使用、销毁。
【笔记】Spring是什么_第9张图片

第一步,实例化在堆空间中申请空间,此时对象的属性值一般是默认值,反射创建对象的过程createBeanInstance
【笔记】Spring是什么_第10张图片
发现下面的三步,不就是反射的三步骤吗?获取class对象,获取构造器,newInstance。
在这里插入图片描述
【笔记】Spring是什么_第11张图片
【笔记】Spring是什么_第12张图片

第二、三步,初始化(自定义属性赋值,populateBean)、容器对象属性赋值(Aware就是一个标志,实现接口,能在统一的方法进行处理,invokeAwareMethods)

Spring中的Bean对象按照使用者分为几类?
1.我们的自定义对象;

2.容器对象;(不是我们要用的,是容器在创建过程中要使用的对象),例如:BeanFactory、ApplicationContext、Environment;

【笔记】Spring是什么_第13张图片
理论上到此前三步搞定,对象的创建和属性的赋值都完成了,就做了new一个对象,然后set参数,对象能拿来使用了,但是注意spring要考虑扩展性。


第四步,postProcessor-做Bean对象的扩展实现
【笔记】Spring是什么_第14张图片

前置方法,什么都没有
在这里插入图片描述
后置方法,一路点下去
【笔记】Spring是什么_第15张图片

在这里插入图片描述

所以结论:AOP其实就是IoC整体流程(Bean生命周期)里的一个扩展点
第五步,InitializingBean——执行初始化方法
【笔记】Spring是什么_第16张图片
至此图上的7个步骤都处理结束,接着就能使用Bean对象


使用对象
context.getBean()

销毁Bean对象(不用)
在这里插入图片描述
我们开发用不到销毁容器的代码,所以不用管

默写图例

【笔记】Spring是什么_第17张图片

你可能感兴趣的:(笔记,spring,java)