spring framework 原理分析

1、BeanFactory基础上扩展出的ApplicationContext - 我们最常使用的上下文。除了具备BeanFactory的全部能力,上下文为应用程序又增添了许多便利: 

    * 可以支持不同的信息源,我们看到ApplicationContext扩展了MessageSource 
    * 访问资源 , 体现在对ResourceLoader和Resource的支持上面,这样我们可以从不同地方得到bean定义资源 
    * 支持应用事件,继承了接口ApplicationEventPublisher,这样在上下文中引入了事件机制而BeanFactory是没有的。

bean的生命周期:

      第一步:实例化类,构造函数的执行
      第二步:设置属性
      第三步:设置bean的名称也就是spring容器中的名称,也就是id值man
      第四步:了解工厂信息ApplicationContext
     第五步:初始化之前执行的方法(存在实现BeanPostProcessor接口的类 postProcessBeforeInitialization方法)
     第六步:属性设置后执行的方法 (实现了接口InitializingBean,执行afterPropertiesSet方法)
     第七步:执行自己配置的初始化方法 (定义了init-method属性)
     第八步:执行初始化之后的方法 (存在实现BeanPostProcessor接口的类 执行postProcessAfterInitialization方法)
      第九步:执行自身的业务方法
      第十步:执行spring的销毁方法 (实现了DisposableBean接口)
      第十一步:执行自己配置的销毁方法(定义了destroy-method属性)

2、spring中 并没有对Bean做任何处理,不存在线程安全的问题,是否安全,取决于bean自身是否安全,和spring没有关系;

3、BeanFactory 定义容器,生成bean》》BeanDefinition 存储配置信息,  BeanDefinitionReader读取配置信息(装饰器)

4、ioc初始化的顺序

 4.1 mini流程

spring framework 原理分析_第1张图片

 

4.2 spring中的流程,这里的注册的只是类元型信息的注册,不是指实例化;classpath,网络,文件的容器,同时也是资源加载器,因为AbstractApplicationContext继承了DefaultResourceLoader;

spring framework 原理分析_第2张图片

spring framework 原理分析_第3张图片

4.3 看源码关注类的命名

4.4 FactoryBean主要是spring容器内部使用,容器的实例;BeanFactory定义了获取Bean的工厂方法,容器的规范;

     

spring framework 原理分析_第4张图片

 

5、Spring DI

spring framework 原理分析_第5张图片

 

 

6、AOP顺序

spring framework 原理分析_第6张图片

 

spring framework 原理分析_第7张图片

 

切面:就是即将织入的增强代码;有可能不用自己写,比如@Transactional注解;

pointcut: 就是应用的代码,被切入的代码;

7、springmvc没有对url和method进行缓存,只是缓存了url和Controller的关系,因为需要支持热部署;建议url和method进行缓存;

8、spring jdbc

8.1、数据库事务通过临时表 

表有物理表 、临时表(内存),插入一条记录,如果物理表存在主键冲突,发现有,返回报错;如果没有,存到临时表,再去和物理表比较检查,如果没有报错,则插入物理表,清掉临时表;如果有报错,则返回报错;

 一次insert,申请一个临时表,物理表的记入放到临时表;

  一次update,申请一个临时表,物理表的记入放到临时表;

  一次delete,申请一个临时表,物理表的记入放到临时表;

 一次select ,直接查询的物理表,解析,然后返回客户端;

spring framework 原理分析_第8张图片

 

spring framework 原理分析_第9张图片

隔离级别数值越大,隔离级别越大,锁范围越大,性能越低

 

spring framework 原理分析_第10张图片

8.2 、分布式事务

满足CAP原则;一致性,可用性,分区容错性,满足AP,最终达到一致性;

DTS:通过日志还原,显然滞后,变成了异步操作;

你可能感兴趣的:(spring)