1.自定义标签实现及使用参考: http://blog.csdn.net/fighterandknight/article/details/50112701 1)创建一个需要扩展的组件 User.java 2)定义一个XSD文件,描述组件内容 user.xsd 3)创建一个java类 MyParser.java ,实现BeanDefinitionParser接口,用来解析XSD文件中的定义和组件定义 4)创建一个Handler类 MyNamespaceHandler.java ,扩展子NameS…
Spring 工作流程是先加载解析xml配置文件:配置文件中存在默认的标签,也可以自定义标签.解析默认标签调用: private void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { if (delegate.nodeNameEquals(ele, IMPORT_ELEMENT)) { importBeanDefinitionResource(ele); } else if (delegate…
实验环境: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源码情操陶冶-DefaultBeanDefinitionDocumentReader#parseBeanDefinitions,特开辟出一块新地来啃啃这块有意思的骨头 自定义节点的类型 我们常用的可分为spring/springmvc两类 spring常用的节点类型 context类型 context-component-scan-扫描包内的所有class类并注册为beanDefinition到spring上下文 context-property-placeholder-…
继续spring源码的学习之路,现在越来越觉得这个真的很枯燥的,而且我觉得要是自己来看源码,真的看不下去,不是没有耐心,而是真的没有头绪,我觉得结合着书来看,还是很有必要的,最起码大致的流程是能够捋清楚的,继续,希望自己能够坚持到最后! 一.标签解析的总体的理解 spring标签包括默认标签和自定义标签两种,今天只是来探索默认标签的! org.springframework.beans.factory.xml包下的DefaultBeanDefinitionDocumentReader类中 pri…
说明 今天在阅读Spring源码的时候,发现在加载xml中的bean时,解析了很多标签,其中有常用的如:scope.autowire.lazy-init.init-method.destroy-method等等.但还有很多很少用甚至没用过的标签,看来对这个经常使用的框架,还是知之甚少,本着探索的精神,决定将bean中所有相关标签的作用做一次整理,以便完善自己的知识体系. 另外,说明一下,使用的Spring源码版本为当前最新版本5.2.0.BUILD-SNAPSHOT,跟老版本中的相关代码可能会有…
一,环境配置 操作系统:Unbutu14.04LTS JDK: 1.8.0_40 git: 1.9.1 gradle: 2.2.1 二,源码下载-编译-导入eclipse-验证 1,下载 使用git直接clone Spring源码到本地:git clone git://github.com/SpringSource/spring-framework.git 2,编译 编译过程,这里所谓的编译是通过gradle工具编译Spring-framework的项目文件,主要干的事情就是下载Spring各个…
这个是接着上一篇来写,主要是这章内容比较多,还是分开来写吧! 一.AbstractBeanDefinition属性介绍 XML中的所有的属性都可以在GenericBeanDefinition中找到对应,GenericBeanDefinition只是子类实现,大部分通用的配置都在其父类AbstractBeanDefinition中定义,来看一下AbstractBeanDefinition中有哪些属性定义,因为我看的是spring5.0版本,和作者的版本应该不一样,这里是少了两个属性的就是scope…
环境 jdk8 windows8 1.下载源码 https://github.com/spring-projects/spring-framework 2.编译为eclipse项目 源码下载无法直接导入eclipse,需要编译为eclipse项目. 进入源码目录下,执行 import-into-eclipse.bat 3.安装插件 groovy 导入eclipse发现还是有地方报错找不到 GroovyDynamicElementReader 需要安装一个eclipse的groovy插件 在ecl…
abstract 属性说明 abstract 在java的语义里是代表抽象的意思,用来说明被修饰的类是抽象类.在Spring中bean标签里的 abstract 的含义其实也差不多,表示当前bean是一个抽象的bean,从而不会为它生成实例化对象. 声明一个bean,但是又不让它实例化??? 莫方,存在即合理,abstract 属性存在必定有其存在的意义,且听我慢慢道来. parent 属性说明 在此之前,我们先说一下另一个属性: parent ,顾名思义,就是一个认爸爸的属性,用来表明当前的b…
scope 属性说明 在spring中,在xml中定义bean时,scope属性是用来声明bean的作用域的.对于这个属性,你也许已经很熟悉了,singleton和prototype信手捏来,甚至还能说出request.session.global session,scope不就只有这么几个值吗. emmm,话不要说太满,容易打脸.常见的各类博客中,一般只会介绍上面说到的几种可能值,但翻一翻官方的说明,你就会发现,事情并没有这么简单. 这是官方文档中的介绍,scope属性一共有六种可能值,惊不惊…
转载自 http://ljbal.iteye.com/blog/497314 前段时间在公司做了一个项目,项目用了spring框架实现,WEB容器是Tomct 5,虽然说把项目做完了,但是一直对spring的IoC容器在web容器如何启动和起作用的并不清楚.所以就抽时间看一下spring的源代码,借此了解它的原理. 我们知道,对于使用Spring的web应用,无须手动创建Spring容器,而是通过配置文件,声明式的创建Spring容器.因此在Web应用中创建Spring容器有如下两种方式: 1.…
在做Spring MVC时,我们只需用@Controllor来标记Controllor的bean,再用@RequestMapping("标记")来标记需要接受请求的方法,方法中第一个参数为HttpServletRequest类型,最后一个参数为Model类型,中间可以为任何POJO,只要符合标准,有set和get,Spring即可以根据网页请求中的参数名,自动绑定到POJO对象的属性名,这是相当方便的.其中的原理是什么呢?看下源代码就可以知道了. 首先,要知道Method对象的invo…
前言 作为一个Java开发者,工作了几年后,越发觉力有点不从心了,技术的世界实在是太过于辽阔了,接触的东西越多,越感到前所未有的恐慌. 每天捣鼓这个捣鼓那个,结果回过头来,才发现这个也不通,那个也不精.就连我吃饭的家伙Java,现在想想,其实我根本就不了解. 可是每当编写简历的时候,总想把工作经验.工作年限写的长一点,半年写成一年,一年写成两年.可是每当有人问我技术原理的时候,又会想, 我的工作时间要是短一点的话,答不上来是不是就不会这么丢脸. 还记得刚工作不久,就在项目中使用过Spring了,…
承接前文Spring源码情操陶冶-自定义节点的解析,本文讲述spring通过context:component-scan节点干了什么事 ComponentScanBeanDefinitionParser#私有属性 罗列下context:component-scan可填的基础属性 private static final String BASE_PACKAGE_ATTRIBUTE = "base-package"; private static final String RESOURCE…
本文承接前文Spring源码情操陶冶-自定义节点的解析,分析spring中的context:annotation-config节点如何被解析 源码概览 对BeanDefinitionParser接口的实现方法parse代码如下 @Override public BeanDefinition parse(Element element, ParserContext parserContext) { Object source = parserContext.extractSource(elemen…
本文针对spring配置的context:property-placeholder作下简单的分析,承接前文Spring源码情操陶冶-自定义节点的解析 spring配置文件应用 <context:property-placeholder location="classpath:context.properties"> PropertyPlaceholderBeanDefinitionParser-继承关系 配置文件解析类的继承关系如下 * AbstractBeanDefini…
承接Spring源码情操陶冶-自定义节点的解析.线程池是jdk的一个很重要的概念,在很多的场景都会应用到,多用于处理多任务的并发处理,此处借由spring整合jdk的cocurrent包的方式来进行深入的分析 spring配置文件样例 配置简单线程池 <task:executor keep-alive="60" queue-capacity="20" pool-size="5" rejection-policy="DISCARD&…
承接Spring源码情操陶冶-自定义节点的解析.本节关于事务进行简单的解析 spring配置文件样例 简单的事务配置,对save/delete开头的方法加事务,get/find开头的设置为不加事务只读模式 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*"…
实验环境: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] 本文重点将一下Spring是如何解决循环…
实验环境: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] 一.Spring中几个概念 1.1 Be…
实验环境: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-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] 本文以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-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] AOP代理对象也是在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] Spring源码-IOC部分-循环依赖-…
写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spring的整体思路就是按部就班的读取标签并把数据放入一个map集合中以备后用. ps:以前在看别人写博客时没有很注意,到自己写才发现:博文一长,如何去维持文章的可读性,让读者在阅读时理清整篇文章的脉络实在是一件很难的事情.上篇文章就是如此,我自己回头去读时都难以去顺畅的学习,何况他人,甚是惭愧.也尝试数…
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 到这里我们已经完成了分析默认标签的解析与提取过程,或许涉及的内容太多,我们已经忘了是从哪个函数开始了,我们再次回顾下默认标签解析函数的起始函数: /** * Process the given bean element, parsing the bean definition * and registering it with the registry. */ protected…
一.自定义标签,自定义标签在使用上面相对来说非常常见了,这个也算是spring对于容器的拓展.通过自定义标签的方式可以创造出很多新的配置方式,并且交给容器直接管理,不需要人工太多的关注.这也是spring对于配置拓展的一个很重要的方式. 二.自定义标签的几个步骤:1.创建可扫描的标签和对应的解析类  2.读取页面元素解析 3.加入容器管理 三.涉及到的常用类:BeanDefinitionParser.NamespaceHandlerSupport:文件:spring.handlers.sprin…
2019独角兽企业重金招聘Python工程师标准>>> 1.自定义标签步骤 创建一个需要扩展的组件 定义xsd文件描述组件内容 创建一个文件,实现BeanDefinitionParser接口,解析xsd文件中的定义和组件定义 创建handler文件,扩展NamespaceHandlerSupport,注册组件到spring容器 编写spring.handlers和spring.schemas文件 2.代码如下 1.编写pojo public class User { private St…