spring
jzq114
这个作者很懒,什么都没留下…
展开
-
IOC容器构造之加载和解析配置文件
资源文件的定位已分析完,接下来便是加载和解析配置文件。如果资源文件都已经定位到了,加载配置文件这一步也就算完成了。那么本篇文章的重点就是解析配置文件了。这个解析有两层的解析关系。第一层的解析是按照正常的XML文件的解析方式来解析配置文件。第二层的解析是在第一层解析的基础上,按照Spring的Bean的配置规则再来解析一次。 意思就是说配置文件中关于Bean的配置项,在经过第二层的解析之后,就会被映原创 2016-03-05 22:51:58 · 1279 阅读 · 0 评论 -
AOP源码分析之初始化通知器链
因为配置了Aop的缘故,所以getBean获取的实例也不再是本身的实例对象,而是代理对象。那么我们来看下这个代理对象生成的过程。 根据Aop配置文件的内容,先找到org.springframework.aop.framework.ProxyFactoryBean这个类。ProxyFactoryBean类实现了FactoryBean接口,所以是个FactoryBean。FactoryBean中有原创 2016-05-04 23:44:33 · 591 阅读 · 0 评论 -
Aop源码分析之如何实现功能增强
Aop的核心原理概括起来就是代理和拦截。代理对象生成之后,当我们调用目标对象被代理的方法时,就会触发拦截器的拦截功能,从而实现增强目标对象功能的作用。拦截器对目标对象方法进行拦截的方式是回调,比如使用Jdk动态代理生成的对象都会实现InvocationHandler接口,那么就需要在回调invoke方法中实现拦截,即增强,同理如果使用Cglib的方式生成代理对象,那么实现拦截功能的就是回调方法就是i原创 2016-05-10 22:48:00 · 691 阅读 · 0 评论 -
IOC容器构造之资源文件定位源码分析
接着上一篇顺藤摸瓜,Spring版本3.2.16,代码调试工具Eclipse,没有可直接导入Eclipse源码的同志可在下方留言,寡人免费赠送一份。接下来以ApplicationContext容器系列为例,通过分析ApplicationContext的实现来分析资源定位的相关源码。 ApplicationContext是一个接口,它的主要实现有两个,FileSystemXmlApplication原创 2016-02-28 19:14:10 · 823 阅读 · 1 评论 -
Spring依赖注入源码分析
Bean已经实例化,接下来便是依赖注入。 回到AbstractAutowireCapableBeanFactory类的populateBean方法。 方法中,先从RootBeanDefinition中获取属性值,这些属性保存的内容是配置文件解析完之后的值,将配置文件解析成BenDefinition的过程,前面有专门的文章描述。对属性进行注入的实现在applyPropertyVa原创 2016-03-13 17:13:19 · 3666 阅读 · 1 评论 -
Spring源码学习
不知不觉已经工作快两年,期间也阅读过些许源代码,无奈未进行系统的归纳和总结,过一段时间就忘的一干二净。记得有个前辈说过,人类对于一些无序的东西很容易就忘了,现在看来很是有道理,于是便想借用博客的方式再学习一次。学习源码的过程是坎坷的,主要是因为源码的代码量都很大,没有一个清晰的目标和一个主要的学习线路,很容易就会钻进代码的森林里面找不到北,这里看一点,那里看一点,零零散散连不成一条完整的线,其结果就原创 2016-02-28 12:29:45 · 666 阅读 · 0 评论 -
依赖注入之Bean的实例化
上一篇分析到了通过递归的方式获取Bean的所有依赖,接下来就该实例化Bean了。 对于实例化Bean,Spring提供了两种方式,一种是Jdk的反射功能,还有一种就是Cglib。这两种实例化的方式的区别是什么呢? 依赖注入的起点是getBean方法,然后会调用createBean方法来实现这个过程。 进入createBean方法 resolveBeanClass方法判断需要创建的原创 2016-03-12 12:47:21 · 2389 阅读 · 1 评论 -
依赖注入之Bean实例化前的准备
IOC容器虽然已经构造好,但现在的容器只是一个壳,对象间的依赖关系还未进行填充。那么接下来便分析填充依赖关系的过程,即依赖注入。依赖注入主要有两个过程,一个是实例化Bean,另一个是将依赖关系注入到Bean中。 依赖注入的入口是我们熟悉的getBean方法。 AbstractBeanFactory的doGetBean方法是具体实现依赖注入的地方 方法中的代码较多原创 2016-03-08 22:51:40 · 2948 阅读 · 0 评论 -
Spring实现AOP源码分析
Aop又叫面向切面编程,它的作用就是管理分散在整个应用中的变动。这句话理解起来有点抽象,举个例子,比如我想在多个方法中加一些打印日志,看下这些方法耗时如何,这些日志信息就是程序中的变动,而且是分散在各个不同的方法中的。如果我一个一个方法中去加日志信息的话,方法数量少的情况还可以勉强维护,如果数量多的话,维护起来就比较头疼了。这个时候我们就可以使用Aop来统一管理这些日志信息,后期的维护也就相对轻松的原创 2016-03-20 17:55:02 · 1516 阅读 · 0 评论 -
IOC容器构造之注册BeanDefinition源码分析
解析完配置文件,接下来便是BeanDefinition的注册了。为了不至于每次用到配置信息的时候都去解析一遍配置文件,我们需要将解析结果保存起来。而保存解析结果这个过程就是BeanDefinition的注册。既然是保存,那就需要一个保存的容器,这个容器就是HashMap。于是BeanDefinition的注册就变成了将解析之后的BeanDefinition信息保存在HashMap中这样一个操作。具体原创 2016-03-06 17:21:07 · 910 阅读 · 0 评论 -
Aop源码分析之生成代理对象
Java中生成代理对象有两种方式,一种是Jdk原生的动态代理,另一种就是利用Cglib。Jdk原生的动态代理只能实现对接口的代理,无法实现对Class类的代理,因此Spring中引入Cglib来实现Class类的动态代理。 Aop中代理对象是在ProxyFactoryBean类的getSingletonInstance方法中生成的。 进入createAopProxy方法。createAopP原创 2016-05-08 16:04:36 · 1059 阅读 · 0 评论