随笔分类 -  Spring源码解析

内容来自
摘要:BeanFactory和FactoryBean1.BeanFactory BeanFactory定义了IOC容器的最基本形式,并提供了IOC容器应遵守的的最基本的接口,也就是SpringIOC所遵守的最底层和最基本的编程规范。在Spring代码中,BeanFactory只是个接口,并不是IOC容器... 阅读全文
posted @ 2014-09-12 12:59 mjorcen 阅读(554) 评论(0) 推荐(0) 编辑
摘要:2.1 案例: 1 static final String XML_PATH = "applicationContxt.xml"; 2 3 @Test 4 public void testXMLBeanFactory() { 5 try { 6 ... 阅读全文
posted @ 2014-06-23 18:09 mjorcen 阅读(163) 评论(0) 推荐(0) 编辑
摘要:5.6循环依赖实例化bean是一个非常复杂的过程,而其中最比较难以理解的就是对循环依赖的解决,不管之前读者有没有对循环依赖方面的研究,这里有必要先对此知识点稍作回顾。5.6.1什么是循环依赖循环依赖就是循环引用,就是两个或多个bean相互之间的持有对方,比如CircleA引用CircleB,Circ... 阅读全文
posted @ 2014-04-21 22:05 mjorcen 阅读(644) 评论(0) 推荐(0) 编辑
摘要:5.5准备创建bean我们不可能指望在一个函数中完成一个复杂的逻辑,而且我们跟踪了这么多Spring代码,经历了这么多函数,或多或少也发现了一些规律:一个真正干活的函数其实是以do开头的,比如doGetObjectFromFactoryBean;而给我们错觉的函数,比如getObjectFromFa... 阅读全文
posted @ 2014-04-21 19:55 mjorcen 阅读(288) 评论(0) 推荐(0) 编辑
摘要:5.4获取单例之前我们讲解了从缓存中获取单例的过程,那么,如果缓存中不存在已经加载的单例bean就需要从头开始bean的加载过程了,而Spring中使用getSingleton的重载方法实现bean的加载过程。DefaultSingletonBeanRegistry.java /** ... 阅读全文
posted @ 2014-04-21 19:23 mjorcen 阅读(173) 评论(0) 推荐(0) 编辑
摘要:5.3从bean的实例中获取对象 在getBean方法中,getObjectForBeanInstance是个高频率使用的方法,无论是从缓存中获得bean还是根据不同的scope策略加载bean。总之,我们得到bean的实例后要做的第一步就是调用这个方法来检测一下正确性,其实就是用于检测当前bea... 阅读全文
posted @ 2014-04-21 17:55 mjorcen 阅读(444) 评论(0) 推荐(0) 编辑
摘要:5.2缓存中获取单例bean介绍过FactoryBean的用法后,我们就可以了解bean加载的过程了。前面已经提到过,单例在Spring的同一个容器内只会被创建一次,后续再获取bean直接从单例缓存中获取,当然这里也只是尝试加载,首先尝试从缓存中加载,然后再次尝试尝试从singletonFactor... 阅读全文
posted @ 2014-04-21 15:59 mjorcen 阅读(332) 评论(0) 推荐(0) 编辑
摘要:5.1FactoryBean的使用一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean。在某些情况下,实例化bean过程比较复杂,如果按照传统的方式,则需要在中提供大量的配置信息,配置方式的灵活性是受限的,这时采用编码的方式可能会得到一个简单的方案。Spring... 阅读全文
posted @ 2014-04-21 15:58 mjorcen 阅读(285) 评论(0) 推荐(0) 编辑
摘要:内容来自,之后的不一一复述!在Spring中,最基本的IOC容器接口是BeanFactory - 这个接口为具体的IOC容器的实现作了最基本的功能规定 - 不管怎么着,作为IOC容器,这些接口你必须要满足应用程序的最基本要求:对bean加载的探索。bean加载的功能实现远比bean的解析要复杂得多,... 阅读全文
posted @ 2014-04-21 15:55 mjorcen 阅读(866) 评论(0) 推荐(0) 编辑
摘要:1.0 自定义标签的解析. 在之前的章节中,我们完成了对spring 默认标签的加载过程.那么现在我们将开始新的里程, spring 自定义标签的解析;代码如下: 1 /** 2 * Parse the elements at the root level in the docu... 阅读全文
posted @ 2014-04-07 21:28 mjorcen 阅读(1355) 评论(0) 推荐(0) 编辑
摘要:对于嵌入式的beans标签,想信大家很少使用过,或者接触过,起码,我本人就没用过. 它非常类似于Import标签所提供的功能;使用如下: 对这个beans没什么太多可讲,解析代码如下: 1 protected void doRegisterBeanDefinitions(Element root) { 2 String profileSpec = root.getAttribute(PROFILE_ATTRIBUTE); 3 // 处理profile属性 4 /* 5 * this is header... 6 ... 阅读全文
posted @ 2014-04-07 00:12 mjorcen 阅读(544) 评论(0) 推荐(0) 编辑
摘要:对于spring配置文件的编写,我想,对于经历过庞大项目的人,都有那种恐惧的心理,太多的配置文件。不过,分模块都是大多数人能想到的方法,但是,怎么分模块,那就是仁者见仁,智者见智了。我的策略是使用import。基本代码格式如下web.xml applicationContext.xml文件中使用import的方式导入有模块配置文件,以后若有新模块的加入,那就可以简单修改这个文件了,这样大大的简化了配置文件后期的复杂程度; Spring 的解析代码如下; 1 /** 2 * Parse an "import" element an... 阅读全文
posted @ 2014-04-07 00:06 mjorcen 阅读(638) 评论(0) 推荐(0) 编辑
摘要:对于之前漫长的,最核心的Bean标签的解析就没什么好讲的了,首先看看使用方法: 解析过程如下: 1 /** 2 * Process the given alias element, registering the alias with the registry. 3 */ 4 protected void processAliasRegistration(Element ele) { 5 // 获取beanName 6 String name = ele.getAttribute(NA... 阅读全文
posted @ 2014-04-06 23:47 mjorcen 阅读(3163) 评论(0) 推荐(0) 编辑
摘要:1.0registerBeanDefinition 对于配置文件,解析也解析完了,装饰也装饰完了,对于得到的BeanDefinition已经可以满足后续的使用了,唯一剩下的工作就是注册了,也就是: processBeanDefinition 方法中的BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder,getReaderContext().getRegistry()); 代码如下: 1 /** 2 * Process the given bean element, parsing the bean definiti... 阅读全文
posted @ 2014-04-06 23:23 mjorcen 阅读(651) 评论(0) 推荐(0) 编辑
摘要:到这里,我们已经完成了分析默认标签的解析与提取过程,或许设计的内容太多,我们忘了我们是冲哪个函数开始了的,让我们再次回顾一下默认标签解析方法的起始方法.入口如下: 1 /** 2 * Parse the elements at the root level in the document: "import", "alias", "bean". 3 * 4 * @param root the DOM root element of the document 5 */ 6 protected void parseBeanDefinitio 阅读全文
posted @ 2014-04-06 16:54 mjorcen 阅读(564) 评论(0) 推荐(0) 编辑
摘要:之前,我们已尽完成了xml 文档到 GenericBeanDefinition的转换,也就是说,到这里,所有的配置都可以在GenericBeanDefinition 的实例中找到对应的配置. GenericBeanDefinition只是子类实现,而大部分功能都是通用属性,都是保存在AbstractBeanDefinition中,那么我们再次通过AbstractBeanDefinition 的属性来复习一下 我们都解析了哪些对应的配置.AbstractBeanDefinition 的结果图如下:我们在来看看源代码! 1 /** 2 * Base class for concrete... 阅读全文
posted @ 2014-04-06 14:26 mjorcen 阅读(1042) 评论(0) 推荐(0) 编辑
摘要:对于qualifier 子元素,我们接触的更多的是注解形式,在使用Spring 自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常。首先我们先看看他的用法.注解形式是这样的:@Qualifier("XXX") 中的 XX是 Bean 的名称,所以 @Autowired 和 @Qu 阅读全文
posted @ 2014-04-06 01:30 mjorcen 阅读(2579) 评论(0) 推荐(0) 编辑
摘要:1.0 Property子元素的使用 property 子元素是再常用不过的了, 在看Spring源码之前,我们先看看它的使用方法,1. 实例类如下: 1 public class Animal { 2 3 public String type; 4 5 public Set age; 6 7 private Map sell; 8 9 public Animal() {10 11 }12 13 /**14 * @return the type15 */16 public String getType() {... 阅读全文
posted @ 2014-04-06 01:03 mjorcen 阅读(775) 评论(0) 推荐(0) 编辑
摘要:对于构造函数子元素是非常常用的. 相信大家也一定不陌生,举个小例子: 1 public class Animal { 2 3 public String type; 4 5 public int age; 6 7 /** 8 * @param type 9 * @param age10 */11 public Animal(String type, int age) {12 super();13 this.type = type;14 this.age = age;15 ... 阅读全文
posted @ 2014-04-05 17:29 mjorcen 阅读(1879) 评论(0) 推荐(0) 编辑
摘要:1.replaced-method 子元素 方法替换: 可以在运行时用新的方法替换现有的方法,与之前的 look-up不同的是replace-method 不但可以动态地替换返回的实体bean,而且可以动态的更改原有方法的逻辑,1.1.1使用实例: 首先创建一个Bean完成某项业务1 public class Person {2 3 public void show() {4 System.out.println("I am Person ..");5 }6 } 在运营一段时间后需要改变原有的逻辑 1 import java.lang.reflect.Me... 阅读全文
posted @ 2014-04-05 15:05 mjorcen 阅读(1012) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示