随笔分类 -  Spring 源码解析

1
摘要:@Configuration注解提供了全新的bean创建方式。最初spring通过xml配置文件初始化bean并完成依赖注入工作。从spring3.0开始,在spring framework模块中提供了这个注解,搭配@Bean等注解,可以完全不依赖xml配置,在运行时完成bean的创建和初始化工作。 阅读全文
posted @ 2019-10-17 10:14 chen_hao 阅读(10055) 评论(1) 推荐(8) 编辑
摘要:上一篇文章讲解了获取事务,并且通过获取的connection设置只读、隔离级别等,这篇文章讲解剩下的事务的回滚和提交 回滚处理 之前已经完成了目标方法运行前的事务准备工作,而这些准备工作最大的目的无非是对于程序没有按照我们期待的那样进行,也就是出现特定的错误,那么,当出现错误的时候,Spring是怎 阅读全文
posted @ 2019-10-16 11:14 chen_hao 阅读(5752) 评论(3) 推荐(3) 编辑
摘要:上一篇文章我们讲解了事务的Advisor是如何注册进Spring容器的,也讲解了Spring是如何将有配置事务的类配置上事务的,实际上也就是用了AOP那一套,也讲解了Advisor,pointcut验证流程,至此,事务的初始化工作都已经完成了,在之后的调用过程,如果代理类的方法被调用,都会调用Bea 阅读全文
posted @ 2019-10-15 10:45 chen_hao 阅读(5165) 评论(0) 推荐(4) 编辑
摘要:此篇文章需要有SpringAOP基础,知道AOP底层原理可以更好的理解Spring的事务处理。 自定义标签 对于Spring中事务功能的代码分析,我们首先从配置文件开始人手,在配置文件中有这样一个配置:<tx:annotation-driven/>。可以说此处配置是事务的开关,如果没有此处配置,那么 阅读全文
posted @ 2019-10-14 11:07 chen_hao 阅读(6424) 评论(3) 推荐(6) 编辑
摘要:面的几个章节已经分析了spring基于@AspectJ的源码,那么接下来我们分析一下Aop的另一个重要功能,事物管理。 事务的介绍 1.数据库事物特性 原子性多个数据库操作是不可分割的,只有所有的操作都执行成功,事物才能被提交;只要有一个操作执行失败,那么所有的操作都要回滚,数据库状态必须回复到操作 阅读全文
posted @ 2019-10-12 11:01 chen_hao 阅读(4069) 评论(1) 推荐(5) 编辑
摘要:上一篇博文中我们讲了代理类的生成,这一篇主要讲解剩下的部分,当代理类调用时,目标方法和代理方法是如何执行的,我们还是接着上篇的ReflectiveMethodInvocation类Proceed方法来看 我们先来看一张方法调用顺序图 我们看到链中的顺序是AspectJAfterThrowingAdv 阅读全文
posted @ 2019-10-11 10:46 chen_hao 阅读(2976) 评论(0) 推荐(3) 编辑
摘要:在获取了所有对应bean的增强后,便可以进行代理的创建了。回到AbstractAutoProxyCreator的wrapIfNecessary方法中,如下所示: 我们上一篇文章分析完了第16行,获取到了所有对应bean的增强器,并获取到了此目标bean所有匹配的 Advisor,接下来我们要从第17 阅读全文
posted @ 2019-10-10 10:53 chen_hao 阅读(2944) 评论(0) 推荐(4) 编辑
摘要:在上一篇的博文中我们讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这个类到底做了什么工作来完成AOP的操作呢?首先我们看看AnnotationAwareAspectJAutoProxyCreator的层次结构,如下图所示: 阅读全文
posted @ 2019-10-09 11:08 chen_hao 阅读(3731) 评论(3) 推荐(6) 编辑
摘要:我们知道在面向对象OOP编程存在一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志,安全检测等,我们只有在每个对象里引入公共行为,这样程序中就产生了大量的重复代码,所以有了面向对象编程的补充,面向切面编程(AOP),AOP所关注的方向是横向的,不同于OOP的纵向。接下来我们就详 阅读全文
posted @ 2019-09-29 11:04 chen_hao 阅读(3931) 评论(2) 推荐(4) 编辑
摘要:在之前的博文中我们一直以BeanFactory接口以及它的默认实现类XmlBeanFactory为例进行分析,但是Spring中还提供了另一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。 ApplicationContext和BeanFactory两者都是用 阅读全文
posted @ 2019-09-27 15:50 chen_hao 阅读(5947) 评论(3) 推荐(7) 编辑
摘要:一个 bean 经历了 createBeanInstance() 被创建出来,然后又经过一番属性注入,依赖处理,历经千辛万苦,千锤百炼,终于有点儿 bean 实例的样子,能堪大任了,只需要经历最后一步就破茧成蝶了。这最后一步就是初始化,也就是 initializeBean(),所以这篇文章我们分析  阅读全文
posted @ 2019-07-11 10:40 chen_hao 阅读(2542) 评论(0) 推荐(1) 编辑
摘要:什么是循环依赖 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图所示: 注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。 Spring中循环依赖场景有: (1)构造器 阅读全文
posted @ 2019-07-10 10:25 chen_hao 阅读(5365) 评论(1) 推荐(6) 编辑
摘要:doCreateBean() 主要用于完成 bean 的创建和初始化工作,我们可以将其分为四个过程: createBeanInstance() 实例化 bean populateBean() 属性填充 循环依赖的处理 initializeBean() 初始化 bean 第一个过程实例化 bean在前 阅读全文
posted @ 2019-07-09 10:51 chen_hao 阅读(2833) 评论(1) 推荐(5) 编辑
摘要:在 Spring 中存在着不同的 scope,默认是 singleton ,还有 prototype、request 等等其他的 scope,他们的初始化步骤是怎样的呢?这个答案在这篇博客中给出。 singleton Spring 的 scope 默认为 singleton,第一部分分析了从缓存中获 阅读全文
posted @ 2019-07-08 11:12 chen_hao 阅读(3356) 评论(0) 推荐(5) 编辑
摘要:概述 前面我们已经分析了spring对于xml配置文件的解析,将分析的信息组装成 BeanDefinition,并将其保存注册到相应的 BeanDefinitionRegistry 中。至此,Spring IOC 的初始化工作完成。接下来我们将对bean的加载进行探索。 之前系列文章: spring 阅读全文
posted @ 2019-07-05 18:32 chen_hao 阅读(4378) 评论(0) 推荐(5) 编辑
摘要:概述 之前我们已经介绍了spring中默认标签的解析,解析来我们将分析自定义标签的解析,我们先回顾下自定义标签解析所使用的方法,如下图所示: 我们看到自定义标签的解析是通过BeanDefinitionParserDelegate.parseCustomElement(ele)进行的,解析来我们进行详 阅读全文
posted @ 2019-07-05 10:16 chen_hao 阅读(2597) 评论(0) 推荐(4) 编辑
摘要:在spring源码深度解析— IOC 之 默认标签解析(上)中我们已经完成了从xml配置文件到BeanDefinition的转换,转换后的实例是GenericBeanDefinition的实例。本文主要来看看标签解析剩余部分及BeanDefinition的注册。 默认标签中的自定义标签解析 在上篇博 阅读全文
posted @ 2019-07-04 11:02 chen_hao 阅读(2616) 评论(0) 推荐(4) 编辑
摘要:概述 接前两篇文章 spring源码深度解析—Spring的整体架构和环境搭建 和 spring源码深度解析— IOC 之 容器的基本实现 本文主要研究Spring标签的解析,Spring的标签中有默认标签和自定义标签,两者的解析有着很大的不同,这次重点说默认标签的解析过程。 默认标签的解析是在De 阅读全文
posted @ 2019-07-03 10:51 chen_hao 阅读(4356) 评论(0) 推荐(6) 编辑
摘要:概述 上一篇我们搭建完Spring源码阅读环境,spring源码深度解析—Spring的整体架构和环境搭建 这篇我们开始真正的阅读Spring的源码,分析spring的源码之前我们先来简单回顾下spring核心功能的简单使用 容器的基本用法 bean是spring最核心的东西,spring就像是一个 阅读全文
posted @ 2019-07-02 14:40 chen_hao 阅读(12521) 评论(3) 推荐(20) 编辑
摘要:概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-s 阅读全文
posted @ 2019-06-19 11:11 chen_hao 阅读(44803) 评论(3) 推荐(23) 编辑

1