Spring源码
文章平均质量分 79
Owen William
这个作者很懒,什么都没留下…
展开
-
Spring源码之创建AOP代理(补)
在上一章节中,我们已经知道了如何获取增强器,但是我们还一件事还未做,那就是寻找匹配的增强器。下面我们来看这个功能的时序图。 1. AbstractAdvisorAutoProxyCreator 在AbstractAdvisorAutoProxyCreator的类,重点实现寻找匹配的增强器是在方法findAdvisorsThatCanApply中。 protected List原创 2016-03-20 18:36:05 · 434 阅读 · 0 评论 -
Spring源码之ApplicationContext(六)注册BeanPostProcessor
接下来我们继续探索registerBeanPostProcessors的用法。这里需要注意的是,注册拦截Bean创建的Bean处理器,这里只是注册,真正的调用是在getBean时候。 1. PostProcessorRegistrationDelegate 在AbstractApplicationContext类中,调用函数registerBeanPostProcessors,原创 2016-03-21 23:42:12 · 2120 阅读 · 0 评论 -
Spring源码之ApplicationContext(五)激活BeanFactory
这一节我们主是看一个函数invokeBeanFactoryPostProcessors,在前面我们已经知道,这个函数的作用就是激活各种BeanFactory处理器。置于Spring的内部是怎么实现的,我们还是先看一张时序图。 通过上面的时序,我们可以看出,在调用invokeBeanFactoryPostProcessors函数后,该函数又将实现的步骤委托给PostProcessorR原创 2016-03-21 23:39:34 · 777 阅读 · 0 评论 -
Spring源码之bean的加载(五)准备创建bean
我们继续跟踪代码到createBean,也就是创建创建bean,一同来看一下createBean函数中做了哪些准备工作。首先,我们先来看一张时序图。(相关资源可到这里下载:http://pan.baidu.com/s/1sjSo9a9) protected Object createBean(String beanName, RootBeanDefinition mbd, Object[原创 2016-03-23 07:17:31 · 745 阅读 · 2 评论 -
Spring源码之bean的加载(四)获取单例
前面我们有讲过Spring是如何去获取单例的bean,获取是从缓存中来的,可是要是缓存中没有的话怎么办?Spring中使用了getSingleton的方法来重新加载。 下面是getSingleton的主要代码。 public Object getSingleton(String beanName, ObjectFactory singletonFactory) { Assert原创 2016-03-23 07:14:03 · 2300 阅读 · 0 评论 -
Spring源码之bean的加载(三)从bean中获取对象
在上一章节中,我们知道了Spring是如何去获取单例bean,而这一章节我们将要去了解Spring是如何从bean获取对象。 在最开始前面我们知道了,Spring的获取bean的方法的入口函数是getObjectForBeanInstance。那么我们就跟着时序图一步一步赶往代码查看。 1) 首先,我们要看在是getObjectForInstance的函数,这个函数主原创 2016-03-23 07:11:13 · 584 阅读 · 0 评论 -
Spring源码之bean的加载(二)获取单例bean
我们知道,单例bean在系统的加载只加载一次,后期如果想用到对应的bean的话,那么就应该去缓存中获取。当然,首先是尝试去缓存中加载,然后再尝试从singletonFactories中加载。 通过上面的时序图,我们可以找到对应的源码,首先我们看到的是AbstractBeanFactory中的getBean()的函数,之后,又会去调用doGetBean(),其次就到到DefaultSin原创 2016-03-23 07:08:46 · 1280 阅读 · 1 评论 -
Spring源码之bean的加载(一)
从本节开始,我们将对bean的加载进行探索。对于其的探索,我们主要是围绕着这句话进行的:MyTestBean bean = (MyTestBean)bf.getBean(“myTestBean”)。相信大家对这句并不要陌生。那么Spring的代码是如何实现这个功能的呢?这里主要的类是AbstractBeanFactory,这个类包含了主要的调用方法,然后我们再进行展开来讲解。 @Overrid原创 2016-03-23 07:06:50 · 516 阅读 · 0 评论 -
Gradle简单使用
1. 安装 Gradle 在安装之前,我们来了解一下什么是Gradle。Gradle是一个基于Groovy的构建工具,它使用Groovy来编写构建脚本,支持依赖管理和多项目创建,类似Maven,但比其更加简单轻便。读者可以从htt://www.gradle.org/downloads页面下载。笔者在附件中也会给出,可以直接使用。 下载好了之后,要进行以下的操作。 1) 根据对应原创 2016-03-14 23:00:39 · 971 阅读 · 0 评论 -
Spring源码之ApplicationContext(七)获取消息资源
相信对于Spring的国际化资源的使用并不陌生。如果大家忘记了如何使用的话,可以查看博主关于Spring的讲解。在Spring的源码的分析中,我们是基于会使用Spring的基础上的,所以这里我们最关心的是某个功能,Spring的源码是如何实现的。 Spring定义了访问国际化信息的MessageSource接口,并提供了几个易用的实现类。我们可以来看一下MessageSource类图结构。有兴趣原创 2016-03-21 23:44:59 · 1329 阅读 · 0 评论 -
Spring源码之ApplicationContext(八)消息广播
当我们定义某个类,并将这个类继承ApplicationEvent,那么这个类就是一个监听事件的类。如果我们定义了个类继承了ApplicatioListener的话,那么这个类就是个监听器了。我们可以在Spring的配置文件中加入:当程序运行时,Spring会将发出的事件转给我们定义的监听器进行处理。这个过程是如何实现,我们来看一下时序图。 我们跟踪代码到initApplication原创 2016-03-21 23:47:18 · 910 阅读 · 0 评论 -
Spring源码之ApplicationContext(九)初始化剩余的单例
这里所指的剩余的单例,其实就是非延迟加载单例。在Spring的源码中,是通过finishBeanFactoryInitialization的方法来执行的。我们按照惯例,先来看一张时序图。 首先Spring还是调用AbstractApplicationContext中的finishBeanFactoryInitialization的方法。这个方法中包括了ConversionServic原创 2016-03-21 23:49:52 · 835 阅读 · 0 评论 -
Spring源码之创建代理
不知道读者是否还记得,前面的章节中,我们学习了Spring是如何去获得增强方法或增强器,那么这一节中,我们主要来看看Spring是怎样去创建代理。首先我们来看一下创建代理的时序图。 1. AbstractAutoProxyCreator 在获取了对应的bean之后,便可以进行代理的创建了。 protected Object createProxy( Class bean原创 2016-03-20 19:26:09 · 628 阅读 · 0 评论 -
Spring源码之ApplicationContext(一)
相信读者对于ApplicationContext方式加载 XML的使用并不陌生。例如: ApplicationContext ac = newClassPathXmlApplicationContext(“beans.xml”).从这一节开始笔者将会围绕着ApplicationContext的加载XML文件的使用来讲解Spring源码。首先我们以ClassPathXmlApplicationCo原创 2016-03-20 23:48:38 · 572 阅读 · 0 评论 -
Spring源码之ApplicationContext(三)加载BeanFactory
准备好了环境之后,接下来要做的事情是初始化BeanFactory,并进行XML文件读取。总的一句话就是加载BeanFactory。那么Spring是如何实现这个功能呢?接下来笔者就要分析。在分析之前,我们先看一张时序图。(相关资源可到这里下载:http://pan.baidu.com/s/1i3ZocK1) 1. AbstractRefreshableApplicationConte原创 2016-03-20 23:56:06 · 965 阅读 · 0 评论 -
Spring源码之ApplicationContext(二)准备工作
在这一章节中, 我们主要来学习prepareRefresh()方法。这个函数主要就是环境准备,例如对系统属性及环境变量的初始化及验证。下面我们先来看一张时序图。(相关资源可到这里下载:http://pan.baidu.com/s/1i3ZocK1) 1. AbstractApplicationContext 在个类中,我们可以看我们需要的环境准备函数prepareRefresh原创 2016-03-20 23:53:14 · 542 阅读 · 0 评论 -
Spring源码之创建AOP代理
我们在上节中提到了AnnotationAwareAspectJAutoProxyCreator的类,其实这个类实现了BeanPostProcessor接口,所以Spring在加载Bean时,会先调用postProcessAfterInitialization方法。因此,笔者也从这里开始分析。下面先看一张AnnotationAwareAspectJAutoProxyCreator类的层次结构图。(相原创 2016-03-20 18:19:43 · 571 阅读 · 0 评论 -
Spring源码之动态AOP自定义标签
相信读者用过Spring的AOP自定义标签,也就是在bean.xml的文件中添加,注解了这句话后,Spring就会支持注解AOP。那么Spring是如何去处理呢?接下来笔者就带领读者去了解Spring的动态AOP自定义标签的源码。下面我们先来看Spring的时序图,这面主要给出了主要调用的类以其方法。然后我们再来进一步了解各个类和方法。(相关资源可到这里下载:http://pan.baidu.co原创 2016-03-20 18:12:18 · 772 阅读 · 2 评论 -
Spring源码之ApplicationContext(四)功能补充
我们知道Spring支持SPEL语言,支持注册编辑等扩展性的功能。这些扩展性的功能在Spring中是如何处理的。这就是我们即将要了解的函数prepareBeanFactory。一样的,我们先来看时序图。 (相关资源可到这里下载:http://pan.baidu.com/s/1sjSo9a9) 通过上面的时序图,我们可能很清楚得知道,扩展功能就是AdbstractApplicatio原创 2016-03-21 23:36:20 · 459 阅读 · 0 评论 -
Spring源码之ApplicationContext(十)过程刷新
ApplicationContext的初始化的最后一步就是要刷新过程,什么是刷新过程?其实Spring关闭的时候调用stop方法来结束生命周期,通常用来配置后台程序,在启动后一直运行(如对MQ进行轮询等)。我们先来看调用的时序图。(相关资源可到这里下载:http://pan.baidu.com/s/1sjSo9a9) 首先,Spring先调用的是finishRefresh()的方法。原创 2016-03-21 23:52:14 · 1245 阅读 · 0 评论 -
GitHub简单使用
1. 安装GitHub 读者可以去官网http://windows.github.com/,下载并双击安装。如果读者无法通过官网下载,可以用笔者附件中的资源。安装好了之后,可以见到如下的图。 如果读者有勾选在桌面显示,那么可以在桌面上见到如下的图。 接下来,双击GitHub,可以见到如下的图。 2. 使用GitHub下载Spring源码 点击上图的右上角的原创 2016-03-14 22:53:09 · 481 阅读 · 0 评论