概述: Spring是一个企业级的开源框架.它提供轻量级的依赖注入.面向切面编程.全方位的整合框架.下图是Spring框架的组成部分,各部分内容作了简单说明. 依赖注入:         依赖注入是Spring框架的灵魂.它是一种解耦组件之间关系的高层设计模式. 依赖注入案例分析:        现在有一个业务流程中需要把数据保存到软盘中去.最直观的方法就是直接在业务流程中创建一个软盘,用软盘的方式保存数据.如下图:        那如果现在业务变更,我可以让客户选择用软盘来保存数据,或者是U盘…
BeanFactory 上一章中,我们提过Spring的依赖注入容器是BeanFactory.BeanFactory是一个基础接口,它有一个默认实现类:DefaultListableBeanFactory.我们可以由它为出发点看看Spring的类层次结构.如下图所示:        上图中,有一个值得我们学习的设计方法.DefaultListableBeanFactory类实现了ConfigurableListableBeanFactory接口.然后ConfigurableListableBea…
获取bean的过程如上图所示.下一章将继续图示讲解createBean的过程.…
spring中的refresh是一个相当重要的方法.它完成IOC的第一个阶段,将xml中的bean转化为beanDefinition.详细说明如上图所示. 在上图中,创建obtainFreshBeanFactory的过程值得展开来讲.而IOC的第二个阶段是getBean,都将在后续讲解.…
继上一章refresh之后,上图描述了obtainFreshBeanFactory过程.…
Spring Ioc源码分析系列--Bean实例化过程(一) 前言 上一篇文章Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理已经完成了对IoC容器启动方法也就是refresh()方法的简单分析.但是之前的分析在对容器实例化Bean的过程的略过了,留到了这后续的文章分析,所以这篇文章会对Bean的实例化过程做一个介绍. 首先来理一下本文的思路:关键词是实例化.由于Spring是利用反射实现的实例化,脑子里先简单想一下Java里利用发射…
Spring Ioc源码分析系列--Bean实例化过程(二) 前言 上篇文章Spring Ioc源码分析系列--Bean实例化过程(一)简单分析了getBean()方法,还记得分析了什么吗?不记得了才是正常的,记住了才是怪人,忘记了可以回去翻翻,翻不翻都没事, 反正最后都会忘了. 这篇文章是给上篇填坑的,上篇分析到真正创建Bean的createBean(beanName, mbd, args)就没有继续深入去分析了,绕得太深,说不清楚.那么这一篇,就续上这个口子,去分析createBean(be…
前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 本文内容: AbstractApplicationContext#refresh前部分的一点小内容 BeanFactoryPostProcessor调用过程详解 mybatis是如何使用本节知识整合spring的? 正文: 在Spring中,一共分为BeanFactoryPostProcessor和BeanPostProcessor两类后置处理器,他们主要的职责如下: BeanFactoryPo…
更多文章点击--spring源码分析系列 1.FactoryBean设计目的以及使用 2.FactoryBean工厂类机制运行机制分析 1.FactoryBean设计目的以及使用 FactoryBean对象设计是为了生成简化对象, 在BeanDefinition加载的时候FactoryBean的beanName会带有特殊前缀&. public interface FactoryBean<T> { @Nullable T getObject() throws Exception; @Nu…
更多文章点击--spring源码分析系列 主要分析内容: 一.InstantiationAwareBeanPostProcessor简述与demo示例 二.InstantiationAwareBeanPostProcessor与BeanPostProcessor对比 三.InstantiationAwareBeanPostProcessor源码分析:注册时机和触发点 (源码基于spring 5.1.3.RELEASE分析) 一.InstantiationAwareBeanPostProcesso…
Spring更多分析--spring源码分析系列 主要分析内容: 一.BeanPostProcessor简述与demo示例 二.BeanPostProcessor源码分析:注册时机和触发点 (源码基于spring 5.1.3.RELEASE分析) 一.BeanPostProcessor简述与demo示例 BeanPostProcessor是spring非常重要的拓展接口,例如aop通过拓展接口生产代理bean等.接口有两个方法: /** * Factory hook that allows fo…
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源码解析的demo环境,启动这个环境即可开启阅读Spring源码的第一步 开始源码阅读时介绍了Spring容器中最经典的容器ClassPathXmlApplicationContext,这个容器是我们在学习Spring的时候最先接触的一个容器,它负责加载当前环境下的xml配置文件 紧接着介绍了bean…
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring源码-IOC部分-Xml Bean解析注册过程[3] Spring源码-IOC部分-自定义IOC容器及Bean解析注册[4] Spring源码-IOC部分-Bean实例化过程[5] Spring源码-IOC部分-Spring是如何解决Bean循环依赖的[6] 有两种情况会触发bean的实例化:一种是…
spring源码分析系列 (1) spring拓展接口BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor spring源码分析系列 (2) spring拓展接口BeanPostProcessor spring源码分析系列 (3) spring拓展接口InstantiationAwareBeanPostProcessor spring源码分析系列 (4) spring拓展接口SmartInstantiationAwareBean…
更多文章点击--spring源码分析系列 主要分析内容: 1.拓展类简述: 拓展类使用demo和自定义替换符号 2.继承图UML解析和源码分析 (源码基于spring 5.1.3.RELEASE分析)   1.拓展类简述 PropertyPlaceholderConfigurer和PropertySourcesPlaceholderConfigurer都是个bean工厂后置处理器接口BeanFactoryPostProcessor的实现类.可以将上下文(配置文件)中的属性值放在另一个单独的标准j…
更多文章点击--spring源码分析系列 主要分析内容: 一.BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor简述与demo示例二.BeanFactoryPostProcessor源码分析:注册时机和触发点 (源码基于spring 5.1.3.RELEASE分析) 一.BeanFactoryPostProcessor.BeanDefinitionRegistryPostProcessor简述与demo示例 1.BeanFac…
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring源码-IOC部分-Xml Bean解析注册过程[3] Spring源码-IOC部分-自定义IOC容器及Bean解析注册[4] Spring源码-IOC部分-Bean实例化过程[5] Spring源码-IOC部分-Spring是如何解决Bean循环依赖的[6] 容器的初始化过程主要通过Abstract…
最近一段时间,粗略的查看了一下Spring源码,对Spring的两大核心和Spring的组件有了更深入的了解.同时在学习Spring源码时,得了解一些设计模式,不然阅读源码还是有一定难度的,所以一些重要的设计模式简单的做了阐述.同时还会简单的加入一些GOF中提到的设计原则.Spring的源码阅读系列,也暂告一段落.下面是就带你走进Spring世界: Spring系列的引子 1)Spring WebApplicationContext初始化与消亡 这一节帮我们了解Spring是如何初始化WebAp…
概述 对于大多数第一次看spring源码的人来说,都会感觉不知从哪开始看起,因为spring项目源码由多个子项目组成,如spring-beans,spring-context,spring-core,spring-aop,spring-web,spring-webmvc等,整个项目结构如图: 可能有人会觉得,既然spring是一个IOC容器或者说是一个bean的容器,那么应该从spring-beans看起,先了解spring是如何从xml文件配置获取需要创建的bean的信息,但是这里有个问题就是…
本篇介绍Task代理(TaskDelegate.swift) 前言 我相信可能有80%的同学使用AFNetworking或者Alamofire处理网络事件,并且这两个框架都提供了丰富的功能,我也相信很多人都做了二次封装,但事实上,这个二次封装却又异常简单或者是简陋.这篇文章的内容是Task代理,是一篇很独立的文章,大家可以通过这篇文章了解iOS中网络开发是怎么一回事. 那么一条最普通的网络请求,究竟是怎样的一个过程?首先我们根据一个URL和若干个参数生成Request,然后根据Request生成…
用了Spring几年,平时也断断续续在项目里看过一些源码,大多都是比较模糊的,因为一旦从一个地方进去就找不到方向了,只能知道它大概是做了什么事能达到这个功能或者效果,至于细节一般没有太深入去研究.后来才知道是学习方式有误,正常的应该是从它最原始的地方下手,至于学习Spring源码原因就是因为它的方便和快捷还有颠覆了传统的开发模式.例如刚开始学Servlet要编写大量的Servlet,然后又要New不同的对象,然后又要在业务层调用JDBC,还要手动开关事务,还要处理异常等等.Spring核心就是I…
前言 Spring框架之于 JavaEE 程序员来说,犹如锄头之于农民.Java 程序员每天都要使用Spring框架,Spring框架也确实是个可手的工具. 最初使用Spring的时候,我们需要配置maven xml的依赖关系,引入 spring-beans,spring-core,spring-webmvc等. 还要在spring.xml中配置bean ,配置 IOC,配置事务管理,配置数据源.让一个项目跑起来都不是一件简单的事,特别是对于新手来说.经常碰到各种错误. 然而当现在有了sprin…
spring是目前使用最为广泛的Java框架之一.虽然spring最为核心是IOC和AOP,其中代码实现中很多设计模式得以应用,代码看起来简洁流畅,在日常的软件设计中很值得借鉴.以下是对一些设计模式的理解以及源码解析,希望能给大家对设计模式的理解有所帮助. 观察者模式:发布/订阅 更多设计模式更新中..... (基于spring-4.3.23.RELEASE分析) 1.观察者模式: 发布/订阅 如对观察者模式还不是很有概念,可以点击这里.spring中ApplicationEvent事件通知就是…
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 当把文件转换为Document后,接下来的提取及注册bean就是我们的重头戏.继续上一篇的分析,当程序已经拥有XML文档文件的Document实例对象时,就会被引入XmlBeanDefinitionReader的这个方法. /** * Register the bean definitions contained in the given DOM document. * Call…
原文地址:http://blog.csdn.net/xieyuooo/article/details/9089441/ 在spring 3.0以上大家都一般会配置一个Servelet,如下所示: <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>…
ApplicationContext接口 首先看一下一个最基本的上下文应该是什么样子 ApplicationContext接口的注释里写的很清楚: 一个基本applicationContext应该提供: 访问Bean的能力 提供加载资源的能力 发布事件的能力 解析消息.支持国际化的能力 AbstractApplicationContext承上启下 ConfigurableApplicationContext接口: 大部分上下文都实现了此接口. 此接口除了继承了ApplicaitnContext接…
回顾Bean与BeanDefinition的关系. BeanFactory容器. ApplicationContext上下文. 首先总结下: 开发人员定义Bean信息:分为XML形式定义:注解式定义 ApplicationContext搜集Bean的定义:存储到BeabFactory容器的中. BeanFactory根据这些BeanDefinition创建Bean.缓存起来供我们使用. [开发人员]--标注-->[Bean定义] ---搜集 -->[BeanDefinition]---创建--…
这一讲分析spring bean属性注入代码populateBean,源码分析如下 /** * Populate the bean instance in the given BeanWrapper with the property values * from the bean definition. * 丰富bean实例属性 * @param beanName the name of the bean * @param mbd the bean definition for the bean…
Spring在BeanFactory基础上提供了一些列具体容器的实现,其中AnnotationConfigApplicationContext是一个用来管理注解bean的容器,从AnnotationConfigApplicationContext的实现结构图中可以看出: AnnotationConfigApplicationContext继承GenericApplicationContext这个通用应用上下文,GenericApplicationContext内部定义了一个DefaultList…