概述:

Spring是一个企业级的开源框架。它提供轻量级的依赖注入、面向切面编程、全方位的整合框架。
下图是Spring框架的组成部分,各部分内容作了简单说明。
Spring源码由浅入深系列一 简介-LMLPHP

依赖注入: 
        依赖注入是Spring框架的灵魂。它是一种解耦组件之间关系的高层设计模式。

依赖注入案例分析:
        现在有一个业务流程中需要把数据保存到软盘中去。最直观的方法就是直接在业务流程中创建一个软盘,用软盘的方式保存数据。如下图:
Spring源码由浅入深系列一 简介-LMLPHP
        那如果现在业务变更,我可以让客户选择用软盘来保存数据,或者是U盘。那可能的解决方式是面向接口编程,由工厂帮助我们去创建具体介质。如下图所示:
Spring源码由浅入深系列一 简介-LMLPHP
        在这里请注意,我们通常的做法是在业务流程中,根据客户的选择,由工厂生成一个特定介质给业务,这就是我们常说的简单工厂模式。但是,也可以利用反射在工厂里去创建、装配业务与介质。业务与具体的介质完全没有关系,由工厂提供。这时候工厂就变为了一个依赖注入的容器。在Spring中,这个容器由BeanFactory实现。
        Spring的灵魂是依赖注入,依赖注入灵魂就是反射。它的整个实现都是由Java反射去支撑的。

面向切面:

把一些公共功能定义成单独对象,然后在不修改其它类的前提下,将公共功能加入到这些类中。面向切面常用于缓存统一处理、统一异常处理等等。

AOP(面向切面)概念:
        Joinpoint(连接点): 程序执行过程中某个特定的点,比如方法调用的时候或者抛出异常的时候
        PointCut(切入点): 需要被添加上通知的连接点的集合。
        Advice(通知): 在连接点,动态嵌入的一段独立代码(通知常用来调用系统组件方法)。
        Aspect(切面): 切入点和Advice的结合(抽象概念:定义在切入点调用通知)
        Target(目标对象): 需要被添加上Advice的对象
        代理对象:AOP框架生成的对象。在目标对象的基础上,添加了其他操作

面向切面的实现是通过动态代理实现的:JDK动态代理、CGLIB动态代理。

这一章,主要从宏观上把握Spring.到下一章,我们开始剖析Spring的源码。

05-22 02:20