概述:

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源码由浅入深系列一 简介相关推荐

  1. Spring源码分析系列——bean创建过程分析(三)——工厂方法创建bean

    前言 spring创建bean的方式 测试代码准备 createBeanInstance()方法分析 instantiateUsingFactoryMethod()方法分析 总结 spring创建be ...

  2. spring源码解读系列(八):观察者模式--spring监听器详解

    一.前言 在前面的文章spring源码解读系列(七)中,我们继续剖析了spring的核心refresh()方法中的registerBeanPostProcessors(beanFactory)(完成B ...

  3. Spring源码分析(一):从哪里开始看spring源码(系列文章基于Spring5.0)

    一.概述 对于大多数第一次看spring源码的人来说,都会感觉不知从哪开始看起,因为spring项目源码由多个子项目组成,如spring-beans,spring-context,spring-cor ...

  4. spring源码解析系列之事件驱动模型架构

    2019独角兽企业重金招聘Python工程师标准>>> 说在前面 本文转自"天河聊技术"微信公众号 为什么要去研究spring源码,我认为java最NX的就是我写 ...

  5. Spring源码分析系列-Bean的生命周期(总结篇)

    ApplicationContext和BeanFactory   BeanFactory是Spring中的顶层接口,只负责管理bean,而ApplicationContext也实现了BeanFacto ...

  6. spring源码分析系列(一)

    本系列以官方开发文档+spring5的源码为主 一.IOC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中 ...

  7. Spring源码分析系列-循环依赖和三级缓存

    目录 循环依赖 多级缓存 一级缓存 二级缓存 当循环依赖遇上AOP 三级缓存 Spring三级缓存源码实现 总结 循环依赖   BeanFactory作为bean工厂管理我们的单例bean,那么肯定需 ...

  8. spring源码分析系列(二)AOP应用

    这里讲AOP应用 先来说说一个比较虚无缥缈的问题:什么是AOP? 1.OOP 在说AOP之前,我们需要先看看什么是OOP:Object Oriented Programming,翻译过来就是面向对象编 ...

  9. 【Spring源码分析系列】bean的加载

    前言 以 BeanFactory bf  = new XmlBeanFactory(new ClassPathResource("beans.xml"));为例查看bean的加载过 ...

最新文章

  1. AlexeyAB DarkNet YOLOv3框架解析与应用实践(一)
  2. 「人工智能视觉」一直被消费者忽视的工业领域应用
  3. 根据下拉框生成控件列表
  4. 建立UDP到虚拟串口的映射软件 : USR-VCOM,并应用到WiFi调试ESP32
  5. 常见的加密算法 (转自: http://blog.chinaunix.net/uid-8735300-id-2017079.html 本文摘自网络 ,如有雷同 请及时联系我 谢谢)...
  6. python计算n到n+100之间所有奇数的和_Python基本操作题
  7. CF183C:Diverse Permutation(构造)
  8. python后台开发知识点_面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记...
  9. ap 目标检测算法map_目标检测mAP怎么计算
  10. jmeter分布式步骤
  11. python基础教程书籍-Python学习必看书籍_带你高效学习
  12. 深度学习 --- 优化入门二(SGD、动量(Momentum)、AdaGrad、RMSProp、Adam详解)
  13. Swift 获取字符的个数 、字符串的遍历
  14. 现代文文言文转化器_初中语文丨7个文言文背诵技巧,不再为背书发愁,实用收藏...
  15. php 拼接html字符串,php截断带html字符串文章内容的方法
  16. cv2.VideoWriter()
  17. like not like 优化 2
  18. 机器学习模型 知乎_深度剖析知乎目前的内容架构模型
  19. 安装bazel遇到的坑
  20. 排班源码,排班软件源码,排班系统源码,java,php,asp,asp.net,c#,python通用

热门文章

  1. 弹框在一个很的长页面居中显示
  2. Java WebService 接口的简单生成和调用
  3. 原生JS基于window.scrollTo()封装垂直滚动动画工具函数
  4. **ML : ML中的最优化方法
  5. 对于mysql加索引,删除索引,添加列,删除列,修改列顺序的最佳办法测试
  6. 深藏不露,挖掘4种大脑网络中的管理工具
  7. 跪求解,oc内存回收问题
  8. 又一游戏大盗(完美世界、跑跑等)SysInfo1.dll
  9. FastDfs上传图片时报错configparser.NoOptionError: No option ‘connect_timeout‘ in section: ‘__config__‘
  10. superset可视化-deck.gl Scatterplot与MapBox