Spring源码
文章平均质量分 65
潘威威
这个作者很懒,什么都没留下…
展开
-
(三)Spring MVC源码-2.Spring MVC工作流程
在上篇文章中使用队列解决了消息生产者(Producer)与消息消费者(Consumer)之间的异步通信问题。本文中,我们将创建一个工作队列,用于在多个Consumer之间分配资源密集型任务。工作队列的主要思想是避免立即执行并必须等待资源密集型任务完成,而是安排稍后完成任务。我们把一个任务封装成一个消息并发送给一个队列,这些任务将由Consumer完成。当你运行许多Consumer时,任务将它们间共转载 2018-08-31 20:32:00 · 202 阅读 · 0 评论 -
(三)Spring MVC源码-1.MVC模式
RabbitMQ是一种消息队列产品。消息队列简介什么是消息队列顾名思义,消息队列是用来接收和转发消息的队列。消息是二进制数据块,可以是简单的字符串,也可以是更复杂的数据对象。队列接收消息生产者发送的消息,并将消息转发给消息消费者。 消息生产者、消息队列、消息消费者不必在同一服务器上,实际上在大多数应用中,它们确实都不在同一服务器上。为什么要使用消息队列从上面对原创 2018-08-31 20:28:55 · 230 阅读 · 0 评论 -
(二)Spring AOP源码-3.创建AOP代理
背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加速度越来原创 2018-07-31 23:58:18 · 224 阅读 · 0 评论 -
(二)Spring AOP源码-2.从@EnableAspectJAutoProxy开始说起
Dubbo是由阿里巴巴开源的基于Java的高性能RPC框架。简介Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo提供三个关键功能,包括基于接口的远程调用,容错和负载均衡,以及自动服务注册和发现。Dubbo架构简介 (图片来自http://dubbo.io/)节点说明 节点 角色说明原创 2018-07-31 23:56:35 · 243 阅读 · 0 评论 -
(二)Spring AOP源码-1.概述与设计原理-01概述
什么是AOP?AOP(Aspect Oriented Programming),即面向切面编程,可以说是对面向对象编程(OOP)的补充和完善。我们知道OOP允许开发者定义纵向的关系,但并不适合定义横向的关系。比如当需要为多个不具备继承关系的对象添加一个公共行为,例如日志功能,只有在每个类中都引入日志等行为。这样就导致程序中存在大量重读代码,而不利于维护。AOP将那些影响了多个类的公共行为封...原创 2018-06-21 23:40:47 · 314 阅读 · 0 评论 -
(二)Spring AOP源码-1.概述与设计原理-02设计原理
静态代理主要在虚拟机启动时通过改变目标对象字节码的方式完成对目标对象的增强。以静态代理为基础实现的AOP技术的代表为AspectJ。AspectJ在编译期间生成代理对象,因此也称为编译时增强。动态代理不会去修改字节码,而是在运行时在内存中临时生成AOP对象。这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。以动态代理为基础实现的AOP技术则以Spring AOP为代表。Spring AOP的源码中用到了两种动态代理:JDK动态代理和CGLIB动态代理。原创 2018-06-21 23:42:30 · 370 阅读 · 0 评论 -
(一)Spring IoC源码-1.容器的初始化-07总结
以上几篇文章已经详细介绍了IoC容器的初始化过程,本文来对这个过程做个总结。Spring IoC容器的初始化过程主要包括以下几个步骤:获取Resouce实例。加载XML配置文件,封装成Resouce实例。这时Resouce实例中已经有了配置文件的路径等信息。获取Document实例。通过Resource,读取XML配置文件,封装成Document实例。这时Document实例中已经有了...原创 2018-05-31 22:50:22 · 254 阅读 · 0 评论 -
(一)Spring IoC源码-2.bean的加载-02从缓存中获取单例bean
(一)IoC源码-07bean的加载-01整体概览DefaultSingletonBeanRegistry.getSingleton(String)@Overridepublic Object getSingleton(String beanName) { return getSingleton(beanName, true);}@Nullableprotected Ob...原创 2018-06-14 23:24:31 · 352 阅读 · 0 评论 -
(一)Spring IoC源码-2.bean的加载-04创建bean
(一)IoC源码-07bean的加载-01整体概览 (一)IoC源码-07bean的加载-02从缓存中获取单例bean (一)IoC源码-07bean的加载-03创建beanAbstractAutowireCapableBeanFactory.createBean(String, RootBeanDefinition, Object[])@Overrideprotected Obje...原创 2018-06-14 23:59:36 · 467 阅读 · 0 评论 -
(一)Spring IoC源码-2.bean的加载-03从FactoryBean实例中获取目标实例
(一)IoC源码-07bean的加载-01整体概览 (一)IoC源码-07bean的加载-02从缓存中获取单例bean在步骤3和步骤4中中,无论是已经加载到了单例bean还是创建bean后,都需要通过bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);从bean实例中获取对象。无论是从缓存中获取到的b...原创 2018-06-15 09:06:39 · 389 阅读 · 0 评论 -
(一)Spring IoC源码-2.bean的加载-01整体概览
前面几篇文章都是在学习`BeanFactory bf = new XmlBeanFactory(new ClassPathResource("MyBean.xml"))`的实现原理,即IoC容器是如何初始化的。本文要学习的是`MyBean myBean = (MyBean)bf.getBean("myBean");`的实现原理,一般称其为**bean的加载**。原创 2018-06-01 23:17:05 · 365 阅读 · 0 评论 -
(一)Spring IoC源码-3.其他特性的实现原理-01lazy-init与预实例化
如果在XML文件中为Bean定义了lazy-init属性,那么Bean的加载在IOC容器初始化时就预先完成了,我们将其称为预实例化。预实例化虽然会对容器初始化的性能有一些影响,但却能够提高应用第一次取得Bean的性能。原创 2018-06-19 21:17:38 · 501 阅读 · 0 评论 -
(一)Spring IoC源码-3.其他特性的实现原理-02循环依赖的解决
原标题:Spring循环依赖的三种方式 原文链接:https://blog.csdn.net/u010644448/article/details/59108799引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错。下面说一下Spring是如果解决循环依赖的。第一种:构造器参数循环依赖Spr...原创 2018-06-19 22:48:05 · 286 阅读 · 0 评论 -
(一)Spring IoC源码-3.其他特性的实现原理-03BeanPostProcessor的实现
BeanPostProcessor是Bean的后置处理器,它可以监听容器触发的事件。BeanPostProcessor是一个接口类,它有两个接口方法: postProcessBeforeInitialization(Object bean, String beanName),在Bean的初始化前提供回调入口;另一个是postProcessAfterInitialization(Object bean, String beanName),在Bean的初始化后提供回调入口。原创 2018-06-19 23:33:58 · 257 阅读 · 0 评论 -
(一)Spring IoC源码-1.容器的初始化-06自定义标签的解析
在(一)IoC源码-04注册BeanDefinitions一文中,了解到Spring对于默认标签和自定义标签的处理方式是不同的。protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) { //如果元素是默认标签,按照处理默认标签的方式来处理 if (de...原创 2018-05-31 08:15:35 · 272 阅读 · 0 评论 -
(一)Spring IoC源码-1.容器的初始化-05默认标签的解析
默认标签的解析是在org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(Element, BeanDefinitionParserDelegate)方法中处理的。private void parseDefaultElement(Element ele, Be...原创 2018-05-30 08:07:38 · 333 阅读 · 0 评论 -
Spring源码-整体架构
Spring是一个分层框架,它包含大约20个模块。Data Access/Integration层含有JDBC、JDBC、JDBC、JMS、Transactions模块。Web层包含了Websocket、Servlet、Web、Porlet模块。Spring AOP模块将面向切面编程功能集成到Spring框架中。Aspects模块为Spring框架提供了对AspectJ的支持。AspectJ是一个流行的AOP框架。原创 2017-08-02 11:22:35 · 4878 阅读 · 1 评论 -
(一)Spring IoC源码-1.容器的初始化-01容器概述
学习Spring源码,我们应该从哪里学习呢?提到Spring,你第一时间想到的是什么?无论是在面试中,还是在具体的项目中,IoC和AOP都是避不开的。而IoC更为重要,所以我决定从IoC开始学习。IoC又如何开始学习呢?深入理解DIP、IoC、DI以及IoC容器中说得很好: 控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)。 依赖注入(DI):Io...原创 2017-08-05 21:16:02 · 2902 阅读 · 0 评论 -
(一)Spring IoC源码-1.容器的初始化-02初始化过程概览
接下来分析BeanFactory bf = new XmlBeanFactory(new ClassPathResource("MyBean.xml")); 这行代码的实现细节。通过XmlBeanFactory初始化时序图来看下上面代码具体是如何执行的。首先调用ClassPathResource的构造函数来创建一个Resource的对象,然后以Resource的对象作为参数,调用Xm...原创 2017-08-05 21:36:58 · 2269 阅读 · 1 评论 -
(一)Spring IoC源码-1.容器的初始化-03获取Document实例
在上篇文章IoC容器源码-容器的基础的末尾,我们讲到了“加载Xml文件,并封装成Document 实例”是通过Document doc = doLoadDocument(inputSource, resource);来完成的。本文将详细讲解doLoadDocument方法是如何获取Document的。org.springframework.beans.factory.xml.XmlBeanDe...原创 2017-09-20 21:43:13 · 818 阅读 · 0 评论 -
Spring源码-目录
Spring是与2003年兴起一个轻量级的开源框架,由Rod Johnson创建。其致力于解决企业应用开发的复杂性,是企业应用开发的“一站式”(full-stack)选择。Spring是分层的,它包含大约20个模块,以控制反转(Inverse Of Control,IOC)与面向切面编程(Aspect Oriented Programming,AOP)为核心。原创 2017-08-01 16:07:41 · 2436 阅读 · 0 评论 -
(一)Spring IoC源码-1.容器的初始化-04获取并注册BeanDefinitions
在文章IoC源码-容器的基础的末尾,我们讲到从XML中加载Bean定义分为两个步骤来完成的。加载Xml文件,并封装成Document 实例。根据Document实例注册Bean信息。上文IoC源码-获取Document实例已经介绍了如何“加载Xml文件,并封装成Document 实例”。本文将详细讲解如何“根据Document实例注册Bean信息”。org.springframe...原创 2018-04-02 22:11:46 · 326 阅读 · 0 评论 -
Spring源码-将源码导入到eclipse
关于Spring Framework源码的学习从今天就要开始了。首先,要把源码导入IDE中。可是源码下载后,发现项目下只有src目录,eclipse导入不了这样的项目。在网上看了许多导入教程后,发现教程太麻烦,而且还可能出错。所以我直接按照README.md中的内容操作了一下,竟然一次成功!原创 2017-07-31 18:13:22 · 3073 阅读 · 0 评论