随笔分类 -  Spring源码

save/update功能的实现
摘要:前言 以上篇文章Spring连接数据库的实现为基础开始分析Spring中JDBC的支持,首先寻找整个功能的切入点,在例子中我们可以看到所有的数据库的操作都封装在了UserServiceImpl中,而UserServiceImpl中的所有数据库的操作又以其内部属性jdbcTemplate为基础。这个j 阅读全文

posted @ 2019-01-10 15:37 AoTuDeMan 阅读(669) 评论(0) 推荐(0)

Spring连接数据库的实现
摘要:数据库连接JDBC JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接 阅读全文

posted @ 2019-01-10 11:29 AoTuDeMan 阅读(7099) 评论(0) 推荐(0)

创建AOP静态代理(下篇)
摘要:织入 当我们完成了所有的AspectJ的准备工作后便可以进行织入分析了,首先还是从LoadTimeWeaverAwareProcessor开始。 LoadTimeWeaverAwareProcessor实现BeanPostProcessor方法,那么对于BeanPostProcessor接口来讲,p 阅读全文

posted @ 2019-01-09 15:07 AoTuDeMan 阅读(690) 评论(0) 推荐(1)

创建AOP静态代理(上篇)
摘要:前言 AOP的静态代理主要是在虚拟机启动时通过改变目标对象字节码的方式来完成对目标对象的增强,它与动态代理相比具有更高的效率,因为在动态代理调用的过程中,还需要一个动态创建代理类并代理目标对象的步骤,而静态代理则是在启动时便完成了字节码增强,当系统再次调用目标类时与调用正常的类并无差别,所以在效率上 阅读全文

posted @ 2019-01-09 10:10 AoTuDeMan 阅读(586) 评论(0) 推荐(1)

静态AOP使用示例
摘要:加载时织入(Load-Time Weaving,LTW)指的是在虚拟机载入字节码文件时动态织入AspectJ切面。Spring框架的值添加为AspectJ LTW在动态织入的过程中提供了更细粒度的控制。使用Java(5+)的代理能使用一个叫“Vanilla”的AspectJ LTW,这需要在启动JV 阅读全文

posted @ 2019-01-08 16:37 AoTuDeMan 阅读(826) 评论(0) 推荐(0)

创建AOP代理(下篇)
摘要:接着上篇文章就绪讲述创建AOP代理的CGLIB代理。 CGLIB的使用示例 CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如SpringAOP和dynaop,为它们提供方法的拦截(Interception)。最流行的OR Mapping工具 Hibernate也使用CG 阅读全文

posted @ 2019-01-08 14:32 AoTuDeMan 阅读(287) 评论(0) 推荐(0)

创建AOP代理(中篇)
摘要:创建代理 在获取了所有对应bean的增强器后,便可以进行代理的创建了。 对于代理类的创建及处理,Spring委托给了ProxyFactory去处理,而在上述函数中主要是对ProxyFactory的初始化操作,进而对真正的创建代理做准备,这些初始化操作包括如下内容: (1)获取当前类中的属性; (2) 阅读全文

posted @ 2019-01-08 10:31 AoTuDeMan 阅读(303) 评论(0) 推荐(0)

创建AOP代理(上篇)
摘要:前言 上一篇文章动态AOP自定义标签讲解了自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册,那么这个类型到底做了什么工作来完成AOP的操作呢?来看一下AnnotationAwareAspectJAutoProxyCreator类UML图: 阅读全文

posted @ 2019-01-07 15:49 AoTuDeMan 阅读(327) 评论(0) 推荐(0)

动态AOP自定义标签
摘要:前言 之前的文章讲述过自定义注解,如果声明了自定义的注解,那么就一定会在程序的某个地方注册了对应的解析器。我们发现在AopNamespaceHandler中的init函数: 从上述的代码中可以看出,在解析配置文件的时候,一旦遇到aspectj-autoproxy注解时就会使用解析器AspectJAu 阅读全文

posted @ 2019-01-06 20:23 AoTuDeMan 阅读(379) 评论(0) 推荐(0)

动态AOP使用示例
摘要:前言 我们知道,使用面向对象编程(OOP)有一些弊端,当需要为多个不具有继承关系的对象引入一个公共的行为时,例如日志、安全检查等,我们只有在每个对象里引用公共的行为,这样程序中就产生了大量的重复代码,程序就不便于维护了,所以就有了一个面向对象编程的补充,即面向切面编程(AOP),AOP所关注的方向是 阅读全文

posted @ 2019-01-06 16:12 AoTuDeMan 阅读(316) 评论(0) 推荐(0)

初始化非延迟加载单例和finishRefresh
摘要:初始化非延迟加载单例 完成BeanFactory的初始化工作,其中包括ConversionService的设置、配置冻结以及非延迟加载的bean的初始化工作。 首先我们来了解一下ConversionService类提供的作用。 1.ConversionService的设置 之前我们提到过使用自定义类 阅读全文

posted @ 2019-01-04 16:53 AoTuDeMan 阅读(309) 评论(0) 推荐(0)

BeanFactory的后处理
摘要:前言 BeanFactory作为Spring中容器功能的基础,用于存放所有已经加载的bean,为了保证程序上的高可扩展性,Spring针对BeanFactory做了大量的扩展,比如我们熟知的PostProcessor等都是在这里实现的。 激活注册的BeanFactoryPostProcessor 在 阅读全文

posted @ 2019-01-04 15:43 AoTuDeMan 阅读(320) 评论(0) 推荐(0)

功能扩展
摘要:在进入函数prepareBeanFactory前,Spring已经完成了对配置的解析,而ApplicationContext在功能上的扩展也由此展开 也就是对BeanFactory进行各种功能上的填充。 功能填充对BeanFactory 上面的函数主要进行了几个方面的扩展: (1)增加对SPEL语言 阅读全文

posted @ 2019-01-03 20:23 AoTuDeMan 阅读(330) 评论(0) 推荐(0)

加载BeanFactory
摘要:前言 上一篇文章讲述了ApplicationContext扩展功能的之一:环境准备。这篇文章接着讲述ApplicationContext的扩展功能 加载BeanFactory,也就是初始化BeanFactory,并进行XML文件的读取。 加载BeanFactory obtainFreshBeanFa 阅读全文

posted @ 2019-01-02 21:11 AoTuDeMan 阅读(266) 评论(0) 推荐(0)

环境准备
摘要:前言 环境准备是ApplicationContext扩展功能refresh函数中的第一个步骤,接下来我们就详细的看看准备了什么? 环境准备 prepareRefresh函数主要是做些准备工作,例如对系统属性及环境变量的初始化及验证。 最后的两句代码才是关键,代码中没有什么逻辑处理,initPrope 阅读全文

posted @ 2018-12-29 10:47 AoTuDeMan 阅读(416) 评论(0) 推荐(0)

初识ApplicationContext
摘要:前言 前面的文章一直是以BeanFactory接口以及它的默认实现类XMLBeanFactory为例进行分析,但是,在Spring中还提供了另一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。 ApplicationContext和BeanFactory的区别 阅读全文

posted @ 2018-12-28 21:06 AoTuDeMan 阅读(229) 评论(0) 推荐(0)

初始化bean和销毁bean的扩展
摘要:前言 前两篇文章创建bean和属性注入已经讲述了创建bean的前三个步骤,这篇文章讲述的是创建bean的最后一个步骤 初始化bean。 初始化bean 在bean的配置中有一个init-method的属性,这个属性的作用是在bean实例化前调用init-method指定的方法来根据用户业务进行相应的 阅读全文

posted @ 2018-12-27 20:53 AoTuDeMan 阅读(231) 评论(0) 推荐(0)

属性注入
摘要:前言 上一篇文章创建bean讲述了创建bean的第一二个步骤,这篇文章接着讲述创建bean的第三个步骤 属性注入。 属性注入 在了解循环依赖和创建bean的时候,我们曾经经常反复的提到了populateBean这个函数,这个方法的作用就是对属性进行填充,那么究竟是如何实现填充的呢? 分析上述代码的逻 阅读全文

posted @ 2018-12-26 21:11 AoTuDeMan 阅读(645) 评论(0) 推荐(0)

创建bean
摘要:前言 上一篇文章讲述了循环依赖以及Spring中的循环依赖的处理方式后,我们接着准备创建bean这篇文章来继续讲述bean的创建,先回顾一下(截取部分createBean代码): 可以看出在经历过resolveBeforeInstantiation方法后,上述代码有两个返回途径,如果创建了代理或者说 阅读全文

posted @ 2018-12-25 21:40 AoTuDeMan 阅读(310) 评论(0) 推荐(0)

循环依赖
摘要:定义 什么是循环依赖?循环依赖就是循环引用,就是两个或者多个bean相互之间的持有对方,比如TestA引用TestB,TestB引用TestC,TestC引用TestA,这样它们最终反映为一个环。这里需要强调一点,此情形不是循环调用,循环调用是方法之间的环调用。循环引用如下图: 循环调用是无法解决的 阅读全文

posted @ 2018-12-21 17:05 AoTuDeMan 阅读(1553) 评论(0) 推荐(0)

导航