天天看点

Spring技术内幕学习笔记

一、 Spring的设计理念和整体架构

1.Spring的设计目标

简单来说,Spring为开发者提供的是一个一站式的轻量级应用开发框架。作为平台,Spring抽象了开发中遇到的共性问题。同时作为轻量级的框架,Spring有一些特点:支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO的设计方法。

依据对传统操作系统的认知方法,在设计上把Spring划分为核心、组件和应用3个基本的层次。可以把IOC容器和AOP模块看做Spring的Kernel,是平台实现的核心部分。Spring为用用开发提供了许多即开即用的组件和服务,这些服务涵盖了Java EE各个基本服务,对于其他的服务,也可以动态的扩展到Spring体系中。Spring通过社区和自己的努力,提供了这些看起来不起眼,却对推广起着关键作用的部分,从而构建出一个丰富的生态系统。

2.Spring的整体架构

Spring技术内幕学习笔记

2.Spring的应用场景

Spring的最终目标是简化应用开发的编程模型。它所提供的服务,可以贯穿应用到整个软件中。从最上层的Web UI到底层的数据操作,到其他企业信息数据的集成,再到各种J2EE服务的使用。一方面,我们可以把Spring作为一个整体来使用,另一方面,也可以各取所需,把Spring的各个模块拿出来单独使用。

二、 IoC容器的实现

1.IoC容器概述

1.1IoC模式

    如果合作对象的引用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测试性的降低,这对复杂的面向对象系统的设计是非常不利的。

    通过使用IoC容器,对象依赖关系的管理被反转了,转到IoC容器中来了,对象之间的相互依赖关系由IoC容器进行管理,并由IoC容器完成对象的注入。应用控制反转后,当对象被创建时,由一个调控系统内的所有对象的外界实体将其所依赖的对象的引用传递给它,即依赖被注入到对象中。所以控制反转是关于一个对象如何获取它所依赖的对象的引用,在这里,反转指的是责任的反转。

    简单地说,因为很多对象依赖关系的建立和维护并不需要和系统运行状态有很强的关联性,所以可以把在面向对象编程中需要执行的诸如新建对象,对对象引用赋值等操作交给容器统一完成。这样一来,这些散落在不同代码中的功能相同的部分就集中成为容器的一部分,也就是成为面向对象系统的基础设施的一部分。

    如果对面向对象系统中的对象进行简单分类,会发现除了一部分是数据对象外,其他很大一部分对象是用来处理数据的。这些对象并不常发生变化,是系统中基础的部分。在很多情况下,这些对象在系统中以单间的形式起作用就可以满足应用的需求。而且他们也不常涉及数据和状态共享的问题。同时,这些对象之间的相互依赖关系也是比较稳定的,这些特性使这些对象非常适合由IoC容器来管理。虽然他们存在于应用系统中,但是应用系统并不承担管理这些对象的责任,而是通过依赖反转把责任交给了容器。

1.2IoC的应用场景

    在Spring中。Spring IoC容器提供了一个基本的JavaBean容器,通过IoC模式管理依赖关系,并通过依赖注入和AOP切面增强了为JavaBean这样的POJO对象赋予事务管理、生命周期管理等基本功能,相比于EJB组件,降低了应用开发对传统J2EE技术规范的依赖。

    同时,如果使用IoC容器,吧资源获取的方向反转,让IoC容器主动管理这些依赖关系,将这些依赖关系注入到组件中,那么会让这些依赖关系的适配和管理更加灵活。

    另一方面,在反转的实现中,如果能通过刻度的文本来完成配置,并且还能通过工具对这些配置信息进行可视化的管理和浏览,MAME肯定是能够提高对组件关系的管理水平。这符合开闭准则,并提高了组件系统设计的灵活性。

2.IoC容器系列的设计和实现

2.1设计

Spring技术内幕学习笔记

2.2 BeanFactory

    BeanFactory接口定义了IoC容器最基本的形式,并且提供了IoC容器所应遵守的最基本的服务契约,同时,这也是我们使用IoC容器所应遵守的最底层和最基本的编程规范。

Spring技术内幕学习笔记

Spring还提供了符合这个IoC容器的实现。

Spring技术内幕学习笔记

XmlBeanFactory继承自DefaultListableBeanFactory这个类。后者是作为一个默认的功能完整的IoC容器,是在很多地方都会用到的容器系列中的一个基本产品。

Spring技术内幕学习笔记

参考XmlBeanFactory的实现,我们以编程的方式使用DefaultListableBeanFactory,这对我们了解IoC的工作原理是非常有帮助的。

Spring技术内幕学习笔记

2.3 ApplicationContext

ApplicationContext在BeanFactory的基础上添加了许多附加功能:

支持不同的信息源(MessageSource)

访问多个资源(DefaultResourceLoader)

支持应用事件(ApplicationEventPublisher)

面向框架的使用风格(一些附加方法)

Spring技术内幕学习笔记