12、Spring特性-non-lazy-init

在之前的文章,笔者讨论的都是在用户第一次调用的时候触发的IOC过程,也就是所谓的lazy-init,下面看一下non-lazy-init,它是在IOC容器初始化的时候就把实例注入到了IOC容器中,它的思想是在容器完成对XML文件的BeanDefinition封装之后主动触发了该过程,具体过程和之前...

2018-01-27 09:39:43

阅读数 79

评论数 0

11、IoC之依赖注入(5)-属性注入过程

在得到一个代理生成的目标对象之后,需要对目标对象进行属性注入,具体的实现是在AbstractAutowireCapableBeanFactory类中的populateBean方法中实现。具体代码如下:   // AbstractAutowireCapableBeanFactory // 使用b...

2018-01-27 09:36:36

阅读数 113

评论数 0

10、IoC之依赖注入(3)-解析注入的属性

对于属性注入的间接引用,具体的解析过程是在BeanDefinitionValueResolver类中的resolveValueIfNecessary方法中实现的,主要解析Array,Set,Map,props和字符串类型的间接引用。具体实现源码如下: // BeanDefinitionVa...

2018-01-27 08:31:19

阅读数 70

评论数 0

9、IoC之依赖注入(2)-bean的代理对象生成

在前面已经封装好BeanDefinition之后,那么接下来就根据指定的BeanDefinition通过反射生成指定的对象。 1、根据目标对象确定实例的产生方式:JDK或者CGLIB。有Override方法目标对象,使用CGLIB方式实例化具体的对象。 // SimpleInstantiat...

2018-01-26 15:01:37

阅读数 135

评论数 0

8、IoC之依赖注入(1)-getBean过程

从本篇blog开始,笔者开始开始分析IoC容器的依赖注入过程。 1、依赖注入发生的时间有两个: A、用户第一次调用getBean方法时; B、配置了lazy-init属性,在IoC容器初始化的时候就发生了;   2、具体看一下第一种,用户第一次调用getBean方法时发生的依赖注入。Sp...

2018-01-26 14:57:15

阅读数 95

评论数 0

7、IoC容器的初始化(6)-BeanDefinition注册

在解析完Document读取的XML文件之后,会返回若干个BeanDefinition对象,那么解析来就是把这些对象注册到BeanFactory中,等待使用。注册BeanDefinition的入口是BeanDefinitionReaderUtils中的registerBeanDefinition方...

2018-01-26 14:48:47

阅读数 36

评论数 0

6、IoC容器的初始化(5)-具体的bean解析流程

在上篇文章中已经看到了Spring中对根元素的解析过程,接下来看一下bean的具体解析过程。 1、解析三个属性:id、name和别名: // BeanDefinitionParserDelegate // 具体的一个元素解析 // 本函数主要解析三个属性:id、name和别名 publ...

2018-01-26 14:44:41

阅读数 37

评论数 0

5、IoC容器的初始化(4)-由Document解析根节点

本文主要讨论Document的根元素解析过程。   1、调用XmlBeanDefinitionReader中的registerBeanDefinitions方法,注册包含在给定DOM文档中的BeanDefinitions。   // XmlBeanDefinitionReader中 // ...

2018-01-26 14:35:09

阅读数 31

评论数 0

4、IoC容器的初始化(3)-配置文件的读取

配置文件的读取主要干两件事:1、确定读取方式;2、把XML文件中的信息封装到DOM对象中。 1、 确定读取方式;它的读取入口应该是DefaultResourceLoader类中的getResource(String location)方法,这里面主要是在确定确认读取方式 // Defa...

2018-01-26 14:24:43

阅读数 27

评论数 0

3、IoC容器的初始化(2)-BeanFactory创建和Bean Definition的定位资源加载

在前面IoC容器的初始化(1)中FileSystemXmlApplicationContext构造函数中的前两个方法super(parent);和setConfigLocations(configLocations);,接下来继续看refresh();   refresh();方法实现在Abs...

2018-01-26 14:16:10

阅读数 39

评论数 0

2、IoC容器的初始化-初始化资源加载器和上下文

这篇以及后面的几篇blog,都将讨论ApplicationContext初始化过程,其大致流程就需要完成与BeanDefinition相关的三件事1、Resource定位;2、载入;3、注册。 下面主要以FileSystemXmlApplicationContext类为例 1、 定位资源: ...

2018-01-26 13:44:12

阅读数 53

评论数 0

1、Spring IOC体系

在Spring IOC体系中最重要的两个部分就是BeanFactory和BeanDefinition。 BeanFactory: BeanFactory是一系列工厂的接口,典型的工厂模式,BeanFactory来实例化、配置和管理对象。BeanFactory和很多具体的实现类,先来看一下Bea...

2018-01-26 13:21:57

阅读数 38

评论数 0

5_策略模式

写在前面:设计模式不是干掉变化,而是让变化集中到一个区域,方便开发。   策略模式最大价值就是干掉了选择,特别是switch,通过这种模式,可以干掉在代码在switch中的强耦合关系。 按照惯例,还是来个生活写照:有一个国际的税务组织,需要和各国的税务规则打交道,每个国家都有自己的税务体系,...

2018-01-17 09:38:11

阅读数 49

评论数 1

4_模板方法

写在前面:设计模式不是干掉变化,而是让变化集中到一个区域,方便开发。 Template Method的核心观点就是把一般的操作步骤定下来,具体细节不管。 一个现实中的例子就是买火车票(从本地出发),假设角色有老师和学生,买票方式有线上和线下。那么可以分为4种情况:1、老师线上买票;2、学生线上...

2018-01-16 21:27:54

阅读数 33

评论数 0

3_观察者模式

写在前面:设计模式不是干掉变化,而是让变化集中到一个区域,方便开发。 观察者模式就是现实生活情景的一个写真。在现实生活中有这样一个场景,就是在医院等待检查报告,等待的病人或者家属怎么知道报告已经出来了呢?有两种解决方案: 1、 每个病人或者家属每隔一段时间就去问,护士就根据已经出来的报告进行回...

2018-01-14 20:49:48

阅读数 41

评论数 0

2_工厂方法

写在前面:设计模式不是干掉变化,而是让变化集中到一个区域,方便开发。  工厂方法的核心思想就是自己不直接”new”对象,而是通过发送一些信息,问其他对象要。举个例子:有个商贸市场,用”new”的方式就是类似把生产基地建设在商贸市场里面,客户要什么,就生产什么。而通过工厂方法就是把工厂搬出去,我只...

2018-01-13 14:31:44

阅读数 37

评论数 0

1_我对设计模式的思考

一直都对设计模式有一种膜拜之情,觉得设计模式是一种高深的技术,一年前大致看了一遍23种设计模式觉得就是一些固定调用,继承,派生的方式,以为记住就可以了。而对设计原则和设计思想视而不见。 再经过了一年的学习和项目经验后在来重新学习设计模式,发现自己有了一些新的思考: 1、 设计模式是思想,不是固...

2018-01-13 11:48:01

阅读数 69

评论数 0

struts2原理模拟

Struts2的核心: Struts2的设计目的是提取Servlet的公共功能,达到简化Servlet的目的。核心思想就是设计一个在Servlet执行之前先做一些工作,比如设置编码,接收参数,还有结束之后的跳转等等。核心实现方式就是添加一个filter,完成上述功能。 图一:Struts2核...

2017-12-11 15:10:27

阅读数 163

评论数 0

8-ClassLoader

ClassLoader的核心作用是:加载指定路径的class JVM将所需要运行的*.class文件加载到JVM进程中需要有一个类加载器(ClassLoader,系统会提供默认类加载器,我们也可以自己写),类加载器的好处就在于我们可以随意指定*.class文件的位置(包括网络上的)。 类的初始化时...

2017-12-08 22:25:19

阅读数 51

评论数 0

7-类的加载、连接、初始化

Java虚拟机的生命周期    在下面的集中情况下会结束java虚拟机 1、 执行了System.exit() 2、 程序正常结束 3、 程序在运行过程中遇到的异常或错误而异常终止 4、 由于操作系统出现错误     类的加载、连接、和初始化 加载:查找并加载的类二进制数据(加载到内存) 将类的c...

2017-12-08 21:04:39

阅读数 75

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭