Spring源码由浅入深系列一 简介
概述:
Spring是一个企业级的开源框架。它提供轻量级的依赖注入、面向切面编程、全方位的整合框架。
下图是Spring框架的组成部分,各部分内容作了简单说明。
依赖注入:
依赖注入是Spring框架的灵魂。它是一种解耦组件之间关系的高层设计模式。
依赖注入案例分析:
现在有一个业务流程中需要把数据保存到软盘中去。最直观的方法就是直接在业务流程中创建一个软盘,用软盘的方式保存数据。如下图:
那如果现在业务变更,我可以让客户选择用软盘来保存数据,或者是U盘。那可能的解决方式是面向接口编程,由工厂帮助我们去创建具体介质。如下图所示:
在这里请注意,我们通常的做法是在业务流程中,根据客户的选择,由工厂生成一个特定介质给业务,这就是我们常说的简单工厂模式。但是,也可以利用反射在工厂里去创建、装配业务与介质。业务与具体的介质完全没有关系,由工厂提供。这时候工厂就变为了一个依赖注入的容器。在Spring中,这个容器由BeanFactory实现。
Spring的灵魂是依赖注入,依赖注入灵魂就是反射。它的整个实现都是由Java反射去支撑的。
面向切面:
把一些公共功能定义成单独对象,然后在不修改其它类的前提下,将公共功能加入到这些类中。面向切面常用于缓存统一处理、统一异常处理等等。
AOP(面向切面)概念:
Joinpoint(连接点): 程序执行过程中某个特定的点,比如方法调用的时候或者抛出异常的时候
PointCut(切入点): 需要被添加上通知的连接点的集合。
Advice(通知): 在连接点,动态嵌入的一段独立代码(通知常用来调用系统组件方法)。
Aspect(切面): 切入点和Advice的结合(抽象概念:定义在切入点调用通知)
Target(目标对象): 需要被添加上Advice的对象
代理对象:AOP框架生成的对象。在目标对象的基础上,添加了其他操作
面向切面的实现是通过动态代理实现的:JDK动态代理、CGLIB动态代理。
这一章,主要从宏观上把握Spring.到下一章,我们开始剖析Spring的源码。
转载于:https://www.cnblogs.com/writeLessDoMore/p/6939408.html
Spring源码由浅入深系列一 简介相关推荐
- Spring源码分析系列——bean创建过程分析(三)——工厂方法创建bean
前言 spring创建bean的方式 测试代码准备 createBeanInstance()方法分析 instantiateUsingFactoryMethod()方法分析 总结 spring创建be ...
- spring源码解读系列(八):观察者模式--spring监听器详解
一.前言 在前面的文章spring源码解读系列(七)中,我们继续剖析了spring的核心refresh()方法中的registerBeanPostProcessors(beanFactory)(完成B ...
- Spring源码分析(一):从哪里开始看spring源码(系列文章基于Spring5.0)
一.概述 对于大多数第一次看spring源码的人来说,都会感觉不知从哪开始看起,因为spring项目源码由多个子项目组成,如spring-beans,spring-context,spring-cor ...
- spring源码解析系列之事件驱动模型架构
2019独角兽企业重金招聘Python工程师标准>>> 说在前面 本文转自"天河聊技术"微信公众号 为什么要去研究spring源码,我认为java最NX的就是我写 ...
- Spring源码分析系列-Bean的生命周期(总结篇)
ApplicationContext和BeanFactory BeanFactory是Spring中的顶层接口,只负责管理bean,而ApplicationContext也实现了BeanFacto ...
- spring源码分析系列(一)
本系列以官方开发文档+spring5的源码为主 一.IOC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中 ...
- Spring源码分析系列-循环依赖和三级缓存
目录 循环依赖 多级缓存 一级缓存 二级缓存 当循环依赖遇上AOP 三级缓存 Spring三级缓存源码实现 总结 循环依赖 BeanFactory作为bean工厂管理我们的单例bean,那么肯定需 ...
- spring源码分析系列(二)AOP应用
这里讲AOP应用 先来说说一个比较虚无缥缈的问题:什么是AOP? 1.OOP 在说AOP之前,我们需要先看看什么是OOP:Object Oriented Programming,翻译过来就是面向对象编 ...
- 【Spring源码分析系列】bean的加载
前言 以 BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beans.xml"));为例查看bean的加载过 ...
最新文章
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(一)
- 「人工智能视觉」一直被消费者忽视的工业领域应用
- 根据下拉框生成控件列表
- 建立UDP到虚拟串口的映射软件 : USR-VCOM,并应用到WiFi调试ESP32
- 常见的加密算法 (转自: http://blog.chinaunix.net/uid-8735300-id-2017079.html 本文摘自网络 ,如有雷同 请及时联系我 谢谢)...
- python计算n到n+100之间所有奇数的和_Python基本操作题
- CF183C:Diverse Permutation(构造)
- python后台开发知识点_面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记...
- ap 目标检测算法map_目标检测mAP怎么计算
- jmeter分布式步骤
- python基础教程书籍-Python学习必看书籍_带你高效学习
- 深度学习 --- 优化入门二(SGD、动量(Momentum)、AdaGrad、RMSProp、Adam详解)
- Swift 获取字符的个数 、字符串的遍历
- 现代文文言文转化器_初中语文丨7个文言文背诵技巧,不再为背书发愁,实用收藏...
- php 拼接html字符串,php截断带html字符串文章内容的方法
- cv2.VideoWriter()
- like not like 优化 2
- 机器学习模型 知乎_深度剖析知乎目前的内容架构模型
- 安装bazel遇到的坑
- 排班源码,排班软件源码,排班系统源码,java,php,asp,asp.net,c#,python通用
热门文章
- 弹框在一个很的长页面居中显示
- Java WebService 接口的简单生成和调用
- 原生JS基于window.scrollTo()封装垂直滚动动画工具函数
- **ML : ML中的最优化方法
- 对于mysql加索引,删除索引,添加列,删除列,修改列顺序的最佳办法测试
- 深藏不露,挖掘4种大脑网络中的管理工具
- 跪求解,oc内存回收问题
- 又一游戏大盗(完美世界、跑跑等)SysInfo1.dll
- FastDfs上传图片时报错configparser.NoOptionError: No option ‘connect_timeout‘ in section: ‘__config__‘
- superset可视化-deck.gl Scatterplot与MapBox