spring源码学习(二)】的更多相关文章

一.环境准备 对于学习源码来讲,拿到一大堆的代码,脑袋里肯定是嗡嗡的,所以从代码实例进行跟踪调试未尝不是一种好的办法,此处,我们准备了一个小例子: package com.zjl; public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void sayHello…
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章当中我没有提及具体的搭建环境的步骤,一个是不得不承认有点懒,另外一个我觉得如果上章所述的那些环境都还不会搭建的话,研究spring的源码还有些过早. 如果你有兴趣的话,相信已经搭建好了学习研究的环境,接下来就可以进入正题了. 网上也有很多关于spring源码学习的文章以及帖子,讲的也都不错,但是有些可能高估了读者的能力,…
写在前面 上文 Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件主要讲Spring容器创建时通过XmlBeanDefinitionReader读取配置文件,将其经过编码并经过系列处理后,交给了同类中的doLoadBeanDefinitions()方法,这次就直接进入这个方法,来看看Spring到底是如何创建BeanDefinition的. 1.2 BeanDefinition的创建 - 创建BeanDefinition前的最终准备 首先进入…
Spring源码学习--ClassPathXmlApplicationContext(一) spring源码学习--FileSystemXmlApplicationContext(二) spring源码学习--AbstractXmlApplicationContext(三) Spring源码学习--XmlWebApplicationContext(四) Spring源码学习--AbstractRefreshableWebApplicationContext(五) Spring源码学习--Abst…
写在前面 上文Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作中Spring对XML解析后创建了对应的Document对象,处理完profile后终于到了标签的解析,这篇文章主要来探究Spring默认标签的解析. 1.4 BeanDefinition的创建 - 处理Spring默认标签 protected void parseBeanDefinitions(Element root, BeanDefiniti…
写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设计精巧,代码优美,值得每一名开发人员学习阅读. 在我最开始学习javaEE时,第一次接触Spring是从一个S(Struts)S(Spring)H(Herbinate)的框架开始.由java原生开发到框架开发转换过程中,那时我的印象里Struts负责控制层,herbinate负责数据层,而Sprin…
Spring源码学习笔记9--构造器注入及其循环依赖 一丶前言 前面我们分析了spring基于字段的和基于set方法注入的原理,但是没有分析第二常用的注入方式(构造器注入)(第一常用字段注入),并且在循环依赖问题上构造器注入常被说spring无法解决构造器注入的循环依赖,下面我们来分析构造器注入和其循环依赖的源码 二丶构造器依赖注入 在spring初始化每一个非抽象,单例,非懒加载的bean的时候,会调用createBeanInstance方法去创建bean的实例,在使用默认的策略--无参构造o…
Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-aop 5.3.22 可能和旧版本有所差异但是大体逻辑一致 一丶AOP概述 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术. 是一种新的模块化机制,用来描述分散在对象,类,或函数中的横切关注点,分离关注点…
Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了https://www.processon.com/view/60f4d859e0b34d0e1b6bb40c?fromnew=1 逻辑事务和物理事务的概念来自https://wiyi.org/physical-and-logical-transactions.html 本文忽略了编程式事务,探究了基于事务注…
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/current/reference/html/core.html 一个IOC讲得很好的博客 https://blog.csdn.net/ivan820819/article/details/79744797 之前总结的Spring文章比较水,这次好好来 文章需要有些Spring源码基础(可以看我的水…
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章和各位一起看了一下springAOP的工作流程,当我们给出AOP相关的配置以后,直接从IOC容器中拿出来的就是已经加强过的bean.这说明spring在这个过程中一定做了什么. 本章我们就一起来看一下spring是如何完成对bean的增强的,首先我们来看一下,FactoryBean接口中一个方法的定义. public i…
写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spring的整体思路就是按部就班的读取标签并把数据放入一个map集合中以备后用. ps:以前在看别人写博客时没有很注意,到自己写才发现:博文一长,如何去维持文章的可读性,让读者在阅读时理清整篇文章的脉络实在是一件很难的事情.上篇文章就是如此,我自己回头去读时都难以去顺畅的学习,何况他人,甚是惭愧.也尝试数…
[目录]Spring 源码学习 jwfy 关注 2018.01.31 19:57* 字数 896 阅读 152评论 0喜欢 9 用来记录自己学习spring源码的一些心得和体会以及相关功能的实现原理,难免存在一些错误的情况,如果发现了,希望能够指出来~ spring版本 4.3.9.RELEASE Spring xml解析 源码学习 本文是学习spring源码的第一篇,主要讲的是,spring经过怎样的步骤完成xml文件的读取并生成相关的beandefinition信息 Spring xml的b…
Spring 源码学习--Aop 什么是 AOP 以下是百度百科的解释:AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP 的原理 AOP 的原理是什么?估计大家都知道了无非就是通过代理模式来为目标对象生产出一个代理对象来,并将相应的逻辑插入到目标方法的前后等等.如果别人这么问,这么回答没毛病,但是这么回答完发现 AOP 也没什么可说的了不是吗.毕竟确实原理就是动态代理.但是 S…
@Adaptive注解 在上一篇ExtensionLoader的博客中记录了,有两种扩展点,一种是普通的扩展实现,另一种就是自适应的扩展点,即@Adaptive注解的实现类. @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface Adaptive { String[] value() default {}; } @Adapt…
前言 在前一篇文章:创建 IoC 容器的几种方式中,介绍了四种方式,这里以 AnnotationConfigApplicationContext 为例,跟进代码,看看 IoC 的启动流程. 入口 从 JavaConfig 中加载配置的 AnnotationConfigApplicationContext 启动方式如下: 进去之后发现构造其实是调用的当前无参构造. 所以在启动时也可以直接声明无参构造,改写为下面这种: public class AnnotationConfigApplication…
这篇笔记主要来就,mybatis是如何利用spring的扩展点来实现和spring的整合 1.mybatis和spring整合之后,我们就不需要使用sqlSession.selectOne()这种方式了,可以直接从spring容器中获取到接口的代理对象,然后调用对应的目标方法,那么,mybatis在将接口交给spring管理的时候,用到了三个扩展点: 1.1 factoryBean  mapperFactoryBean就是实现了factoryBean,然后,通过getObject方法来返回一个代…
六 BeanFactory的后处理BeanFactory作为spring容器的基础,用于存放所有已经加载的bean,为了保证程序上的高扩展性,spring针对BeanFactory做了大量的扩展,比如我们熟知的PostProcessor. 6.1 激活注册的BeanFactoryPostProcessor正式介绍之前,先了解一下BeanFactoryPostProcessor的用法BeanFactoryPostProcessor接口跟BeanPostProcessor类似,可以对bean的定义(…
Spring 源码学习过程: 一.搞明白IOC能做什么,是怎么做的  1. 搞明白IOC能做什么? IOC是用为用户创建.管理实例对象的.用户需要实例对象时只需要向IOC容器获取就行了,不用自己去创建,从而达到与具体类解耦.  2. IOC是怎么做到的,即它的实现步骤是怎么样的? 2.1 用户配置bean定义 我们使用Spring IOC时有几种方式来配置bean定义呢? xml的方式: <bean id="abean" class="com.study.spring.…
Spring是在Rod Johnson的<Expert One-On-One J2EE Development and Design >的基础上衍生而来的.主要目的是通过使用基本的javabean来完成以前只能用EJB完成的事情降低企业应用的复杂性.这一系列源码学习是基于Spring-4.3.11版本的. 一.Spring的整体架构 如图所示,spring可以被总结为一下几个部分: (1)Core Container 为Spring的核心容器,包含Beans,Core,Context和SpEL…
最近想拿出一部分时间来学习一下spring的源码,还特意买了一本书结合来看,当然主要是学习并跟着作者的思路来踏上学习spring的源码的道路,特意在此记录一下,<spring源码深度解析> 一.spring的结构组成 从简单的例子入手,从实际的开发中去解析.学习源码,结合工作中的内容,这样才能更好的.更加深入的学习,go go go!!! 1.容器的基本用法与功能分析 容器基本用法,代码如下: public class MyTestBean { private String testStr =…
一.下载Spring 源码 进入 https://github.com/spring-projects/spring-framework/tags 选择下载spring freamework的版本 https://repo.spring.io/release/org/springframework/spring/ spring各个版本下载 我这里下载的是 spring 3.2版本 二.使用Eclipse创建名为spring的Java工程,然后增加spring相关的Jar 三.关联源代码,先管理A…
继续源码学习,看了spring中基础的容器和AOP感觉自己也没有什么长进,哈哈,我也不知道到底有用没有,这可能是培养自己的一种精神吧,不管那么多,继续学习!AOP中 AOP中几个重要的概念:(1)Advice--通知Advice定义在连接点做什么,为切面增强提供织入接口.在spring中,他主要描述spring AOP围绕方法调用而注入的切面行为.在spring AOP的实现中,使用了AOP联盟定义的统一接口--Advice接口并通过这个接口,为AOP切面的增强的织入功能做了更多的细话和扩展(2…
继续spring源码的学习之路,现在越来越觉得这个真的很枯燥的,而且我觉得要是自己来看源码,真的看不下去,不是没有耐心,而是真的没有头绪,我觉得结合着书来看,还是很有必要的,最起码大致的流程是能够捋清楚的,继续,希望自己能够坚持到最后! 一.标签解析的总体的理解 spring标签包括默认标签和自定义标签两种,今天只是来探索默认标签的! org.springframework.beans.factory.xml包下的DefaultBeanDefinitionDocumentReader类中 pri…
目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这样方便我们在本地环境添加注释.断点追踪.查看类或接口的继承关系等等,更加高效的学习Spring源码.个人觉得深读Spring源码对我们的编码水平会有很大很大的提升,因为其牵涉的广度.深读.以及优秀编码规范都值得我们去品.细品.慢慢品.废话不多说,本篇就如何在我们的intelliJ IDEA编译Spr…
一.接口描述 spring提供了一个接口类-BeanPostProcessor,我们叫他:bean的加工器,应该是在bean的实例化过程中对bean做一些包装处理,里边提供两个方法 public interface BeanPostProcessor { public abstract Object postProcessBeforeInitialization(Object obj, String s) throws BeansException; public abstract Object…
创建日期:2016.08.19 修改日期:2016.08.20-2016.08.21 交流QQ:992591601 参考资料:<spring源码深度解析>.<spring技术内幕>.传值播客spring教学视频 http://www.cnblogs.com/xing901022/p/4264334.html http://www.cnblogs.com/digdeep/p/4528353.html 一,动态代理.java InvocationHandler实现.Cglib实现 要了…
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近工作很忙,但当初打算学习spring源码的事已经基本告一段落,只是一直没时间写这些记录性的文字. 本次鄙人学习spring的源码,有点囫囵吞枣的感觉,其实这样并非就不好,spring作为一个应用平台,自然不是那么好研究透彻的,而且也不太可能有人把spring的源码全部清楚的过上一遍,哪怕是spring的缔造者.不过最主要的…
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近已经开始了spring源码的学习,如果有哪位同学或者同道对此也感兴趣,可以跟着我一起学习,互相探讨spring的实质,扒开它的衣服. 正题开始,学习源码第一步自然是配置学习的环境,需要具备以下条件: 1.JDK 1.6 2.开发工具eclipse或者myeclipse,或者你自己熟悉的JAVA开发工具. 3.安装SVN插件…
为了最大程度地贴近Spring源码并进行学习,一种比较直接的做法是:直接在Spring源码中加入Demo代码,并进行调试. 参照以前使用Spring的经验,Spring最简单的使用方法是:一个实体类.一个Xml配置文件.再加个测试方法.而对于脱离源码的使用,需要至少引入 spring-context 依赖.于是,猜想,在Spring源码中是否可以直接在 spring-context 模块中添加上述最简单的代码呢? 说干就干,在 spring-context 模块中新建一个实体类(Person,位…