Spring源码浅析
初步分析了Spring IoC 和 AOP两个部分的源代码
BazingaLyncc
这个作者很懒,什么都没留下…
展开
-
做一个合格的程序猿之浅析Spring AOP源码(十七) Spring AOP开发大作战
前面AOP几节我们已经浅析了Spring 是如何实现AOP的,和AOP的底层原理,那么今天我们先来看看我们开发环境中是怎么运用AOP的好了,我们先定义一个简单的应用场景,在web开发中,mvc模式中,我们的有些核心service的某些方法是需要打logger的,现在我们例如AOP,将打logger的事情给AOP去做先定义个service接口package org.stu原创 2016-03-25 16:12:05 · 1817 阅读 · 0 评论 -
做一个合格的程序猿之浅析Spring AOP源码(十六) 分析ProxyFactory
其实说实话。通过上面2节的讲解,Spring AOP可以算分析完了,因为我们已经知道AOP最为核心的2个组件都不是ProxyFactoryBean,AspectJProxyFactory,亦或者是这节我们讲解的ProxyFactory,这三个基层的类,做的最重要的事都是去维护几个变量,有了这几个变量就可以做很多事,原因:①这个变量中定义了advice,定义了通知,即定义了干什么②定原创 2016-03-25 14:41:48 · 1856 阅读 · 1 评论 -
做一个合格的程序猿之浅析Spring AOP源码(十五) 分析JdkDynamicAopProxy的invoke方法
上一节我们已经分析了Proxyfactorybean如何去生成一个目标对象的代理的,这一节我们将浅析一下代理的基于JDK动态代理核心的回调方法invoke的源代码JdkDynamicAopProxy.java文件是实现了AopProxy和InvocationHandler这2个接口的先讲AopProxy这个接口,如图所示,AopProxy接口就定义了2个方法我们再看原创 2016-03-25 10:43:45 · 9364 阅读 · 2 评论 -
做一个合格的程序猿之浅析Spring AOP源码(十四) 分析ProxyFactoryBean
最基本的实现有三个,AspectJProxyFactory.java ,ProxyFactory.java ProxyFactoryBean这三个,他们的父类ProxyCreatorSupport只是给了他们一些通用的AOP的实现,最为核心的就是怎么生成代理对象就是在该方法中实现的,如图ProxyCreatorSupport.java核心代码:原创 2016-03-24 15:20:52 · 7585 阅读 · 6 评论 -
做一个合格的程序猿之浅析Spring AOP源码(十三) jdk的动态代理和cglib的代理
Spring AOP的核心就是动态代理,我们先来准备下动态代理的知识的储备 动态代理,顾名思义,就是为一个真实对象生成一个代理的对象,生活中,这种模式也是很常见,例如,淘宝,就是一个代理,很多网店,依托于淘宝,可以更好的卖出很多的产品,但淘宝可能会额外的多做一点事情,这样就会产生双赢的局面好了,我们现在就根据上面的背景,写下两种代理:首先jdk的动态代理:原创 2016-03-23 10:22:32 · 2750 阅读 · 0 评论 -
做一个合格的程序猿之浅析Spring AOP源码(十二) AOP概念理解
AOP(Aspect-Oriented Programming) 面向切面的编程,在我们平时的开发过程中,AOP其实用的地方总结有: ①用来做日记的处理 ②方法的调用统计 ③业务层面的读写分离(例如自定义的Annotation+AOP可以实现切换数据源) ④自定义权限拦截器 在spring框架中,AOP则发挥了不少功效,例如spring原创 2016-03-23 09:30:39 · 2390 阅读 · 0 评论 -
做一个合格的程序猿之浅析Spring IoC源码(十一)Spring refresh()方法解析后记2
接着上次那个后记接着说,我们已经知道了分析了refresh()这个方法中的关于BeanFactoryPostProcessor的执行的代码分析:因为任何实现了BeanFactoryPostProcessor接口的bean首先要做的事就是先把自己实例化好,所以我们花了很大篇幅讲了getBean这个Spring的核心方法~我们看的都是invokeBeanFactoryPos原创 2016-03-14 19:00:31 · 1804 阅读 · 0 评论 -
做一个合格的程序猿之浅析Spring IoC源码(十一)Spring refresh()方法解析后记1
上次分析refresh这块spring IoC的时候,时间比较仓促,只是debug了部分源码,大家分析起来不是很好~今天我们还是先总结一下吧~spring在实例化bean的时候,根据bean实现的接口不同,bean的实例化也是有先后顺序的由于此块代码太多,贴图给大家的学习的效果不好,现在以spring 3.2.5源代码为例,大家再一份“温故”一下,然后“知新”原创 2016-03-14 15:35:18 · 2514 阅读 · 4 评论 -
做一个合格的程序猿之浅析Spring IoC源码(十一)Spring refresh()方法解析之一
经过上面几节的简单介绍我们了解了spring的一些组件,现在我们来分析一下AbstractApplicationContext中的refresh()这个核心方法吧~用我们上一节的代码,debug进入refresh方法:public void refresh() throws BeansException, IllegalStateException { synchronized (原创 2016-03-12 14:21:38 · 6321 阅读 · 3 评论 -
做一个合格的程序猿之浅析Spring IoC源码(十)Spring Bean的初始化顺序
①首先执行的是构造函数②然后执行的BeanNameAware这个接口中的方法③然后执行的是BeanFactoryAware这个接口中的方法④执行InitializingBean接口中的afterPropertiesSet的方法⑤执行我们在xml中定义的init-method这个方法⑥最后执行的是BeanFactoryPostProcessor这个方法这个执行结果我们可以清晰的了解spring的初始化流程,但你可以看出BeanPostProcessor并没有初始化,这是为什么呢?原创 2016-03-12 13:12:00 · 3701 阅读 · 5 评论 -
做一个合格的程序猿之浅析Spring IoC源码(九)了解BeanNameAware
官方给出的解释:实现该接口的bean会意识到自己在beanfactory的的名字,注意虽然这并不值得推荐一个对象依赖它的名字,因为名字只是这个bean的一个脆弱的依赖或者一个额外的配置,也有可能这个bean的名称只是用于Spring API的一个不必要的依赖这个接口表面上的作用就是让实现这个接口的bean知道自己在spring容器里的名字,而且听官方的意思是这个接口更多的使用在spring的框架代码中,实际开发环境应该不建议使用,因为spring认为bean的名字与bean的联系并不是很深,(的确,抛开原创 2016-03-11 16:34:22 · 1995 阅读 · 1 评论 -
做一个合格的程序猿之浅析Spring IoC源码(八)了解BeanFactoryAware
官方解释:实现这个接口的bean其实是希望知道自己属于哪一个beanfactory原创 2016-03-11 16:22:17 · 1886 阅读 · 0 评论 -
做一个合格的程序猿之浅析Spring IoC源码(七)浅谈BeanFactory和FactoryBean
这次就不一句句翻译了(太多了),还是稍微大概的讲一下意思吧:FactoryBean是一个接口,任何一个Bean可以实现这个接口,那么这个bean将成为一个Factory,这个Factory将一些对象暴露出去,这些对象不一定是它们自己,返回的是一个Object对象,这个对象将通过getObject()暴露出去,并且支持单例和prototypes原创 2016-03-11 13:37:22 · 2882 阅读 · 2 评论 -
做一个合格的程序猿之浅析Spring IoC源码(六)BeanFactoryPostProcessor
红色区域标注出:允许自定义去修改应用上下文中的beanDefinnition,来适配底层上下文bean的属性值这句话的意思其实很好理解,当spring初始化好benaDefinnitionMap之后,提供了一个借口允许我们开发者自定义的去修改beanDefinition中的内容,这也是符合“spring”的开闭原则原创 2016-03-11 10:11:49 · 2405 阅读 · 0 评论 -
做一个合格的程序猿之浅析Spring IoC源码(五)再谈BeanPostProcessor(2)
上一节,我们已经初步知道了beanPostProcessor这个接口是干什么的了,可以做什么样的事情,并且我们举了一个简单的“Teacher”的例子,但是大家也有点疑问,这个实际意义是什么呢?在项目中实际运用是什么呢? 下面再给出一个例子,在实际项目中,我们一个项目一套代码,有生产环境和开发环境,数据库链接配置文件有2种,jdbc_dev.properties和jdbc_prd.properties这2个配置文件,我们只需要简单的修改一下,spring的配置文件就可以很快的切换数据源,这样支持多环境原创 2016-03-10 15:55:17 · 2395 阅读 · 4 评论 -
做一个合格的程序猿之浅析Spring IoC源码(四)分析BeanPostProcessor(1)
说白了,就是我们可以自定义的去修改spring给我们创建的类,给了我们一个二次修改bean的机会,这种设计思路与spring的“开闭原则”相符合,没有过度分装,举例来说,我们根据beanDefinition去查找一个Teacher,找到之后spring给我们实例化这个Teacher,但是我们用这个teacher的时候,发现这个teacher会抽烟,我们可以修改这个老师会抽烟的属性,这样就得到了一个完美的老师,这个完美的老师授课结束后,我们再告诉他你可以接着抽烟了,所以spring给我们想的还是很周到的~原创 2016-03-10 13:56:10 · 2953 阅读 · 1 评论 -
做一个合格的程序猿之浅析Spring IoC源码(三)分析refresh()方法前的准备篇(一)
spring IoC源码AbstractApplicationContext.java中refresh这个方法的地位和分析源代码之前的准备~原创 2016-03-10 15:37:28 · 2752 阅读 · 2 评论 -
做一个合格的程序猿之浅析Spring IoC源码(二)BeanFactory初始化
首先,新建项目:pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apach原创 2016-03-08 19:55:11 · 5426 阅读 · 9 评论 -
做一个合格的程序猿之浅析Spring IoC源码(一)分析前的准备和思考
首先,大家都知道Spring是一个框架,是一个容器框架,所谓容器,就是一个可以存放东西的“器皿”,跟我们生活中的水桶,碗,奶粉瓶是一样的器皿。 不同的是存放在这个“器皿”可能不是实体,却是一个抽象的东西,这些东西是什么呢,大家可以这样想,IoC(Inversion of Control)控制反转,我们控制了什么,反转了什么? 我们控制的当然是一个个对象,就是我们一个个在代码里面的原创 2016-03-08 18:39:35 · 7518 阅读 · 12 评论