死磕Spring之IoC篇 - 文章导读】的更多相关文章

原文出自:http://cmsblogs.com import 标签解析完毕了,再看 Spring 中最复杂也是最重要的标签 bean 标签的解析过程. 在方法 parseDefaultElement() 中,如果遇到标签 为 bean 则调用 processBeanDefinition() 方法进行 bean 标签解析,如下: protected void processBeanDefinition(Element ele, BeanDefinitionParserDelegate deleg…
原文出自:http://cmsblogs.com 在 XmlBeanDefinitionReader.doLoadDocument() 方法中做了两件事情,一是调用 getValidationModeForResource() 获取 XML 的验证模式,二是调用 DocumentLoader.loadDocument() 获取 Document 对象.上篇博客已经分析了获取 XML 验证模式([死磕Spring]----- IOC 之 获取验证模型),这篇我们分析获取 Document 对象.…
原文出自:http://cmsblogs.com 在上篇博客[死磕Spring]----- IOC 之 加载 Bean 中提到,在核心逻辑方法 doLoadBeanDefinitions()中主要是做三件事情. 调用 getValidationModeForResource() 获取 xml 文件的验证模式 调用 loadDocument() 根据 xml 文件获取相应的 Document 实例. 调用 registerBeanDefinitions() 注册 Bean 实例. 这篇博客主要分析…
原文出自:http://cmsblogs.com 先看一段熟悉的代码: ClassPathResource resource = new ClassPathResource("bean.xml"); DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory); rea…
原文出自:http://cmsblogs.com 在博客[死磕Spring]----- IOC 之 注册 BeanDefinition中分析到,Spring 中有两种解析 Bean 的方式.如果根节点或者子节点采用默认命名空间的话,则调用 parseDefaultElement() 进行默认标签解析,否则调用 delegate.parseCustomElement() 方法进行自定义解析.所以以下博客就这两个方法进行详细分析说明,先从默认标签解析过程开始,源码如下: private void p…
在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,本篇为[死磕 Spring]系列博客的第一篇博文,主要介绍 IoC 基本概念和各个组件. IOC 理论 IoC 全称为 Inversion of Control,翻译为 "控制反转",它还有一个别名为 DI(Dependency Injection),即依赖注入. 如何理解"控制反转"好呢?理解好它的关键在于我们需要回答如…
本文主要基于 Spring 5.0.6.RELEASE 摘要: 原创出处 http://svip.iocoder.cn/Spring/IoC-intro/ 在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前势必需要对其有深入的认识,本篇为[死磕 Spring]系列博客的第一篇博文,主要介绍 IoC 基本概念和各个组件. 1. IoC 理论 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一…
原文出自:http://cmsblogs.com 获取 Document 对象后,会根据该对象和 Resource 资源对象调用 registerBeanDefinitions() 方法,开始注册 BeanDefinitions 之旅.如下: public int registerBeanDefinitions(Document doc, Resource resource) throws BeanDefinitionStoreException { BeanDefinitionDocument…
原文出自:http://cmsblogs.com 在学 Java SE 的时候我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位.然而,实际上资源的定义比较广泛,除了网络形式的资源,还有以二进制形式存在的.以文件形式存在的.以字节流形式存在的等等.而且它可以存在于任何场所,比如网络.文件系统.应用程序中.所以 java.net.URL 的…
本文主要基于 Spring 5.0.6.RELEASE 摘要: 原创出处 http://cmsblogs.com/?p=2658 「小明哥」,谢谢! 作为「小明哥」的忠实读者,「老艿艿」略作修改,记录在理解过程中,参考的资料. 先看一段熟悉的代码: ClassPathResource resource = new ClassPathResource("bean.xml"); // <1>DefaultListableBeanFactory factory = new Def…
本文主要基于 Spring 5.0.6.RELEASE 摘要: 原创出处 http://svip.iocoder.cn/Spring/IoC-load-Resource/ 在学 Java SE 的时候,我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位.然而,实际上资源的定义比较广泛,除了网络形式的资源,还有以二进制形式存在的.以文件形式…
[死磕 Spring]----- IOC 之深入理解 Spring IoC-------https://www.cnblogs.com/chenssy/p/9576769.html 1.Resource体系 2.BeanFactory 体系 3.Beandefinition 体系 4.BeandefinitionReader体系 5.ApplicationContext体系 上面五个体系可以说是 Spring IoC 中最核心的部分,后面博文也是针对这五个部分进行源码分析.其实 IoC 咋一看还…
死磕Spring源码之AliasRegistry 父子关系 graph TD; AliasRegistry-->BeanDefinitionRegistry; 代码实现 作为bean定义的最顶层接口,这个接口定义了管理别名的一些方法,主要作用是将名字-别名映射存到内存中.提供查找和校验的接口. public interface AliasRegistry { /** * 注册一个名字的别名 * @param name 定义名 * @param alias 需要注册的别名 * @throws Il…
一直以来忙于项目的开发,Spring虽然不用,一直想系统地学习一下,想看看它的源码,都没有时间,这段时间比较充裕,就索性先把Spring学习下,熟悉各个功能再去探究它内部的实现.就从Ioc篇开始学习. 1.实例化spring容器的两种方法       方法一:在类路径下寻找配置文件来实现Spring容器的实例化 ApplicationContext cx= new ClassPathXmlApplicationContext(new String[]{"applicationContext.xm…
一.Spring总体架构 1.架构图 2.SpringIOC:核心容器提供 Spring 框架的基本功能.核心容器的主要组件是 BeanFactory,它是工厂模式的实现.BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开. 3.SpringAOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中.所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP.Spring AOP 模块为…
1.在注解注入方式中,首先要在xml中引入如下的红线的命名空间: <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="…
5.spring依赖注入的方式 方法一:使用构造器方式进行注入 1.dao的类和接口 package com.cvicse.dao.impl; import com.cvicse.dao.PersonDao; public class PersonDaoBean implements PersonDao { public void add(){ System.out.println("执行PersonDaoBean中的add()方法"); } } package com.cvicse.…
无编程不创客,无案例不学习.疯狂创客圈,一大波高手正在交流.学习中! 疯狂创客圈 Java 死磕系列: [博客园 总入口]  QQ群:104131248 [Java 聊天室] 实战从0开始,打造100W级 仿QQ IM后台 [Spring +Netty]:   Spring Netty (整合实战,带源码) [IM协议 实战]:        Netty+Protobuf    整合一:实战案例,带源码 Netty +Protobuf   整合二:protobuf 消息通讯协议设计的几个准则 P…
[基础篇]netty 源码死磕1.1:  JAVA NIO简介 1. JAVA NIO简介 Java 中 New I/O类库 是由 Java 1.4 引进的异步 IO.由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O,所以,更多的人喜欢称之为非阻塞I/O(Non-block I/O). NIO弥补了原来同步阻塞I/O的不足,它在标准Java代码中提供了高速的.面向块的I/O. Java NIO 由以下几个核心部分组成: Channel Buffer S…
[基础篇]netty源码死磕1.2:  NIO Buffer 1. Java NIO Buffer Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.Buffer缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存. 注意:Buffer是非线程安全类. 1.1. Buffer类型的标记属性 Buffer在内部也是利用byte[]作为内存缓冲区,只不过多提供了一些标记变量属性而已.当多线程访…
精进篇:netty源码  死磕4-EventLoop的鬼斧神工 目录 1. EventLoop的鬼斧神工 2. 初识 EventLoop 3. Reactor模式回顾 3.1. Reactor模式的组成元素: 3.2. Reactor模式的三步曲 4. Netty中的Reactor模式应用 5. channel系列类结构 5.1. channel家族成员 5.2. NioSocketChannel 类的层次机构 5.3. netty channel 和本地Channel的关系 6. NioEve…
精进篇:netty源码死磕5  - 揭开 ChannelHandler 的神秘面纱 目录 1. 前言 2. Handler在经典Reactor中的角色 3. Handler在Netty中的坐标位置 4. Netty中Handler的类型 1.1. ChannelInboundHandler入站处理器 1.2. ChannelOutboundHandler出站处理器 5. 揭开Pipeline的神秘面纱 6. Handler的上下文环境 7. Handler的注册 7.1. 第一步:包裹 7.2.…
1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring 包含了众多模块,包括但不限于 Core.Bean.Context.AOP 和 Web 等.在今天,我们完全可以使用 Spring 所提供的一站式解决方案开发出我们所需要的应用.作为 Java 程序员,我们会经常和 Spring 框架打交道,所以还是很有必要弄懂 Spring 的原理. 本文是 Spr…
1. 简介 前一段时间,我学习了 Spring IOC 容器方面的源码,并写了数篇文章对此进行讲解.在写完 Spring IOC 容器源码分析系列文章中的最后一篇后,没敢懈怠,趁热打铁,花了3天时间阅读了 AOP 方面的源码.开始以为 AOP 部分的源码也会比较复杂,所以原计划投入一周的时间用于阅读源码.但在我大致理清 AOP 源码逻辑后,发现没想的那么复杂,所以目前进度算是超前了.从今天(5.15)开始,我将对 AOP 部分的源码分析系列文章进行更新.包括本篇文章在内,本系列大概会有4篇文章,…
问题 (1)AQS是什么? (2)AQS的定位? (3)AQS的实现原理? (4)基于AQS实现自己的锁? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为Java中几乎所有的锁和同步器提供一个基础框架. AQS是基于FIFO的队列实现的,并且内部维护了一个状态变量state,通过原子更新这个状态变量state即可以实现加锁解锁操作. 本章及后续章节的内容理解起来可能会比较晦涩,建议先阅读彤哥上一章的内容[死磕 java同步系列之自己动手写一个锁Lock].…
简介 同步系列到此就结束了,本篇文章对同步系列做一个总结. 脑图 下面是关于同步系列的一份脑图,列举了主要的知识点和问题点,看过本系列文章的同学可以根据脑图自行回顾所学的内容,也可以作为面试前的准备. 如果有需要高清无码原图的同学,可以关注公众号"彤哥读源码",回复"sync"领取. 总结 所谓同步,就是保证多线程(包括多进程)对共享资源的读写能够安全有效的运行. 根据同步的运用场景的不同,实现同步的方式也是随之一起变化,但是总结下来,这些实现方式之间又有一些共通之…
问题 (1)AQS的定位? (2)AQS的重要组成部分? (3)AQS运用的设计模式? (4)AQS的总体流程? 简介 AQS的全称是AbstractQueuedSynchronizer,它的定位是为Java中几乎所有的锁和同步器提供一个基础框架. 在之前的章节中,我们一起学习了ReentrantLock.ReentrantReadWriteLock.Semaphore.CountDownLatch的源码,今天我们一起来对AQS做个总结. 状态变量state AQS中定义了一个状态变量state…
前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于,你没有理解为什么需要这些步骤,也不知道为什么要按这个顺序执行 笔者在阅读完整个IOC跟AOP的源码后,希望通过这篇文章讲一讲我的Spring中Bean生命周期的看法,帮助大家能理解性的记忆整个流程,而不是死记硬背! 基础知识补充 所谓理解也是建立在有一定知识储备的基础上的,所以这里先补充一些基础概念…
概览 原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程上下文切换. 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视作一个整体是原子性的核心特征. 在java中提供了很多原子类,笔者在此主要把这些原子类分成四大类. 原子更新基本类型或引用类型 如果是基本类型,则替换其值,如果是引用,则替换其引用地址,这些类主要有: (1)AtomicBoolean 原子更新布尔类型,内部使用in…
概览 我们先来看一看java中所有集合的类关系图. 这里面的类太多了,请放大看,如果放大还看不清,请再放大看,如果还是看不清,请放弃. 我们下面主要分成五个部分来逐个击破. List List中的元素是有序的.可重复的,主要实现方式有动态数组和链表. java中提供的List的实现主要有ArrayList.LinkedList.CopyOnWriteArrayList,另外还有两个古老的类Vector和Stack. 关于List相关的问题主要有: (1)ArrayList和LinkedList有…