Spring源码解读】的更多相关文章

前言 前段时间旁听了某课堂两节Spring源码解析课,刚好最近自己又在重新学习中,便在这里记录一下学习所得.我之前写过一篇博文,是介绍BeanFactoryPostProcessor跟BeanPostProcessor是如何发挥作用的,当时觉得讲的还行,但是现在看来,太粗劣了,很多地方没涉及到,而且重点都被我忽略了,简直就是蠢得不行.现在就用这篇文章弥补一下前文中对BeanFactoryPostProcessor的讲解,争取把重点讲到,至于BeanPostProcessor,由于涉及到的东西太多…
走在Java程序员这条路上,网上Java各种工具满天飞,写个简单的CRUD,相信是个开发都能写出来,于是在思考如何可以在同行业中更有竞争力(其实就是如何赚更多钱).那么,老大给我推荐了Spring源码. 首先说,为什么要阅读Spring的源码,下面引用别人的回答:https://blog.csdn.net/cjm812752853/article/details/76222491/ 官网下载Spring源码的地址https://github.com/spring-projects/spring-…
说明 今天在阅读Spring源码的时候,发现在加载xml中的bean时,解析了很多标签,其中有常用的如:scope.autowire.lazy-init.init-method.destroy-method等等.但还有很多很少用甚至没用过的标签,看来对这个经常使用的框架,还是知之甚少,本着探索的精神,决定将bean中所有相关标签的作用做一次整理,以便完善自己的知识体系. 另外,说明一下,使用的Spring源码版本为当前最新版本5.2.0.BUILD-SNAPSHOT,跟老版本中的相关代码可能会有…
1 简介 我们常用的ClassPathXmlApplicationContext是AbstractRefreshableApplicationContext的子类,而DefaultListableBeanFactory类型的beanFactory又是AbstractRefreshableApplicationContext的一个成员属性,也就是说ClassPathXmlApplicationContext运用了组合的方式扩展了DefaultListableBeanFactory的功能,使其自身成…
一.什么是Ioc/DI? IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等. 先从我们自己设计这样一个视角来考虑: 所谓控制反转,就是把原先我们代码里面需要实现的对象创建.依赖的代码,反转给容器来帮忙实现.那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系.这个描述最具体表现就是我们可配置的文件. 对象和对象关系怎么表示? 可以用 xml , properties 文件等语义化配置文件表示. 描述对象关系的文件存放在哪里? 可能是 classpa…
原文:https://blog.csdn.net/songjinbin/article/details/19857567 在Spring中,JdbcTemplate是经常被使用的类来帮助用户程序操作数据库,在JdbcTemplate为用户程序提供了许多便利的数据库操作方法,比如查询,更新等,而且在Spring中,有许多类似 JdbcTemplate的模板,比如HibernateTemplate等等 - 看来这是Rod.Johnson的惯用手法, 所谓模板板式,就是在父类中定义算法的主要流程,而把…
在上一文中我们分析了注册 BeanDefinition 的过程,在其中我们了解到在解析跟节点和子节点时分两种情况,对于默认名称空间的标签我们通过 DefaultBeanDefinitionDocumentReader#parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) 进行处理,而对于自定义标签则通过 BeanDefinitionParserDelegate#parseCustomElement(Elem…
一.前言 Spring起源于2002年Rod Johnson写的一本书<Expert One-on-One J2EE>,书里介绍了Java企业应用程序开发情况,并指出Java EE和EJB组件框架中的一些主要缺陷,还提出了一个基于普通的Java类和依赖注入的更简单的解决方案.在书中,他展示了如何在不使用EJB的情况下构建高质量.可扩展性的在线预留座位系统.为构建应用程序,他编写了超过30,000行的基础结构代码,项目中的根包命名为com.interface21,这是Spring的前身,所以框架…
Spring源代码解析(一):IOC容器:http://www.javaeye.com/topic/86339 Spring源代码解析(二):IoC容器在Web容器中的启动:http://www.javaeye.com/topic/86594 Spring源代码解析(三):Spring JDBC:http://www.javaeye.com/topic/87034 Spring源代码解析(四):Spring MVC:http://www.javaeye.com/topic/87692 Sprin…
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属性一共有六种可能值,惊不惊…
前期准备 首先搭建一个简单的Spring Demo工程 项目目录结构如下图所示: applicationContect.xml (可以取其他文件名,只要在加载配置文件时指定文件路径) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www…
aop是指面向切面编程,ProxyFactoryBean是spring aop的底层实现与源头,为什么这么说呢?首先我们看一段配置: 1.target是目标对象,需要对其进行切面增强 2.proxyInterfaces是指代理对象所实现的接口 3.interceptorNames:是指通知器(Advisor)列表,通知器中包含了通知advice与切点pointcut 概括一下,ProxyFactoryBean的作用是: 针对目标对象来创建代理对象,将对目标对象方法的调用转到对相应代理对象方法的调…
本系列博客结合我的理解,对spring的ioc进行简单分析,欢迎大家批评指正. beanfactory 我们从beanfactory开始,beanfactory是最根部的容器,描述了整个ioc的一些规范和原则,也就是这个接口定义了ioc容器的最基本的条件,下面列出了整个接口中的方法 对于这些方法都可以根据方法名了解它的作用,我们这里需要说一下的是它定义的成员变量“&” FactoryBean factorybean本身也是存活于beanfactory中的,本身也是一个工厂也是一个bean,用于创…
我们上一篇文章最后调用到 `org.springframework.beans.factory.xml. XmlBeanDefinitionReader#doLoadDocument(...) ` 方法,该方法主要代码如下: protected Document doLoadDocument(InputSource inputSource, Resource resource) throws Exception { //getValidationModeForResource是数据验证模型 re…
一.AOP介绍 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP).OOP中模块化的关键单元是类,而在AOP中,模块化单元是方面.方面实现了诸如跨越多种类型和对象的事务管理之类的关注点的模块化.(这种担忧通常被称为AOP文献中的横切关注点.) Spring的一个关键组件是AOP框架.虽然Spring IoC容器不依赖于AOP,但是如果您不想使用AOP,则意味着您不需要使用AOP,AOP补充了Spring IoC以提供非常强大的中间件解决方案. 带有AspectJ切…
beanfactory https://www.cnblogs.com/lspz/p/6244948.html requestmapping https://blog.csdn.net/u012557814/article/details/72549386 web.xml启动过程 https://blog.csdn.net/purisuit_knowledge/article/details/53928708 好文 https://zhuanlan.zhihu.com/p/32830470 ht…
Spring源码之SimpleAliasRegistry解读(一) 阅读spring源码中org.springframework.core.SimpleAliasRegistry类时发现该类主要是使用map作为alias的缓存,并对接口AliasRegistry进行实现. 在阅读该源码中对hasAlias(String name, String alias):方法产生了疑惑.源码注释中解释该方法的作用是:确定给定的名称是否已注册了给定的别名. 该方法源码如下: public boolean ha…
Spring源码-循环依赖源码解读 笔者最近无论是看书还是从网上找资料,都没发现对Spring源码是怎么解决循环依赖这一问题的详解,大家都是解释了Spring解决循环依赖的想法(有的解释也不准确,在<Spring源码深度解析>作者也是看别人的博客说明了一下),没有从源码的角度分析是怎么解决循环依赖的,笔者就把自己看源码的过程写一下. 写这一篇文章算是个引路的,Spring为了程序的健壮性做了大量分析校验,调用的方法繁多复杂,我这篇文章为读者清理出解决循环依赖的流程. Spring中对象可以配置…
demo https://gitee.com/easybao/aop.git spring DI运行时序 AbstractApplicationContext类的 refresh()方法 1: prepareBeanFactory(beanFactory); 这个方法是对beanFactory进行前期准备, 可以看到 beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory); 设置了BeanFactory,因…
从把spring下下来,导入到eclipse,花了几个小时的时间. 本来壮志雄心的说要,满满深入学习研读spring源码,现在看来还是不太现实,太难懂了,各种依赖,说明都是英文,整个串起来理解,深入研读太难了. 想想还是自己学得不够深入,现在研读还为时尚早吧.还是等一段时间再研读.现在我还是小菜鸟,深读太困难了... 下面贴出对spring beans的学习: 1. DefaultListableBeanFactory作用说明: 默认实现了ListableBeanFactory和BeanDefi…
请忽略以下的文章,现在回过头来才发现学习源码不用如此复杂 1.IDEA 新建一个maven项目, 2.pom 中倒入 spring5 的基本包,然后利用maven 插件down下源码 3.然后就可以开始,源码分析了. 4.需要做笔记的地方自己摘抄下来即可. --------------------------------- --------------------------------- --------------------------------- 1.安装gradle spring没有…
上一篇介绍了BeanFactory体系的所有接口——Spring源码分析——BeanFactory体系之接口详细分析,本篇就接着介绍BeanFactory体系的抽象类和接口. 一.BeanFactory的基本类体系结构(类为主): 上图可与 Spring源码分析——BeanFactory体系之接口详细分析 的图结合分析,一个以接口为主,一个以类为主(PS:Spring的体系结构要分析清楚,不得不曲线救国啊!不然27寸屏幕给我画估计都装不下.). 具体: 1.7层的类体系继承. 2.Abstrac…
本篇主要讲解Alamofire中错误的处理机制 前言 在开发中,往往最容易被忽略的内容就是对错误的处理.有经验的开发者,能够对自己写的每行代码负责,而且非常清楚自己写的代码在什么时候会出现异常,这样就能提前做好错误处理. Alamofire的错误封装很经典,是使用swift中enum的一个典型案例.读完这篇文章,一定能让大家对swift的枚举有一个更深的理解,同时增加一些枚举的高级使用技巧. 那么有一个很重要的问题,我们应该在什么情况下考虑使用枚举呢?只要结果可能是有限的集合的情况下,我们就尽量…
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-AbstractApplicationContext 约束: 本文指定contextClass为默认的XmlWebApplicationContext 从属AbstractApplicationContext#refresh方法 AbstractApplicationContext#obtainFreshBeanFactory 该方法主要完成创建Bean工厂,涉及到解析spring文件,代码清单如下 protected Conf…
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-ContextLoaderListener 静态代码块内容 ContextLoader在被主动调用的时候,会执行其的一个静态块,代码如下 static { // Load default strategy implementations from properties file. // This is currently strictly internal and not meant to be customized // by…
前言:通过实例结合源码的方式解读,其中涉及到的文件来自于博主的Github毕设项目wxServer Note: Springboot应用不在本文章讨论范围 web.xml中启用Spring 在一般的web应用程序,我们倘若用到Spring的话,需要在web.xml中配置以下的信息来使一些容器,例如Tomcat.Jetty等来加载Spring <context-param> <param-name>contextConfigLocation</param-name> &l…
目录 一.容器概述 二.核心类源码解读 三.模拟容器获取Bean ======================= 一.容器概述 spring IOC控制反转,又称为DI依赖注入:大体是先初始化bean再注入使用的过程.本系列默认JDK8源码.容器接口设计图如下: 如上图,可见主要有两条主线: 1.BeanFactory->HierarchicalBeanFactory->ConfigurableBeanFactory BeanFactory接口定义了基本的Ioc容器的规范,包括getBean(…
前言-阅读源码有利于陶冶情操,本文承接前文Spring源码情操陶冶-AbstractApplicationContext#obtainFreshBeanFactory 前文提到最关键的地方是解析bean xml配置文件,废话不多说,直接上代码清单 //正如官方注释所说,解析import标签.alias标签.bean标签和自定义的标签 protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate del…
代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已,Spring的加载过程相对是不太透明的,不太好去找加载的代码入口. 下面有很简单的一段代码可以作为Spring代码加载的入口: ApplicationContext ac = new ClassP…