登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 毕业论文 > 计算机类 > 软件工程 > 正文

基于IoC和AOP的Spring源码分析毕业论文

 2021-03-19 22:09:59  

摘 要

本文通过对Spring源码的解读,分析Spring的核心——IoC容器和AOP的实现原理,结合设计模式、软件开发原则对实现的原理进行深度分析。从2002年Rod Johnson的《Expert One-on-One J2EE Design and Development》一书的正式出版,基于依赖注入(Dependency Injection)和控制反转(Inversion of Control)概念的Spring框架1.0也在随后发布。Spring框架是一个轻量级的IoC容器,随着Spring的不断完善和改进,Spring框架的使用人数也在不断增多。虽然Spring框架在开发人员之中广受欢迎,但真正了解其内部原理以及实现机制的开发人员却非常少。

基于此,论文主要研究了Spring的核心实现尤其对IoC容器的原理和实现方面做出了详尽的分析。

本文的特色:结合源码讲解,分析IoC和AOP的实现原理。

关键词:IoC、AOP、设计模式、Spring框架、容器

Abstract

This paper mainly analyze the realization principles Spring framework’s core-IoC container and AOP. And try to analyze the source code deeply combining design pattern and software development priciples.Since Rod Johnson published his book 《Expert One-on-One J2EE Design and Development》,the spring framework based DI(Dependency Injection) and IoC(Inversion of Control) also published the 1.0 version subsequently.Spring framework is a light-weight IoC container.The people using Spring framework were increasing past few years continuously as Spring’s improving and perfecting.Although the Spring framework is populated by software developer,people knowing the internal realization of it are very small.

Based on the above,this paper mainly discuss the Spring’s core realization. And analyzing the IoC container’s priciple and realization in special.

The feature of this paper: discussing the priciple combining the source code.

Key Words: IoC、AOP、design pattern、Spring framework、container

目录

第1章 绪论 .................................................................1

1.1 IoC和AOP概念的提出...................................................1

1.1.1 IoC概念的提出......................................................1

1.1.2 AOP概念的提出......................................................2

1.2 Spring框架的发展历程..................................................2

1.3 Spring框架在开发中的应用以及应用中的盲区..............................4

第2章 Spring框架整体概述....................................................5

2.1 Spring框架的组件分析..................................................5

2.1.1 核心容器(Core Container)...........................................5

2.1.2 AOP、Aspects和Instrumentation模块.................................6

2.1.3 Messaging模块.....................................................7

2.1.4 Data Access/Integration(数据存取/集成模块).........................7

2.1.5 Web模块...........................................................8

2.2 Spring框架核心功能概述................................................9

2.2.1 IoC容器功能概述...................................................9

2.2.2 AOP模块功能概述..................................................10

2.3 Spring中IOC和AOP的实现概述..........................................12

第3章 Spring框架IoC容器实现的源码分析......................................13

3.1 IoC容器的接口设计....................................................13

3.1.1 BeanFactory接口设计..............................................13

3.1.2 ApplicationContext接口设计.......................................17

3.2 IoC容器接口的主要实现类..............................................18

3.3 IoC容器的工作流程分析................................................23

3.4 IoC容器的资源定位过程分析............................................23

3.5 IoC容器的资源加载及注册过程分析......................................24

3.6 IoC容器的Bean实例创建过程分析.......................................27

第4章 Spring框架AOP实现的源码分析.........................................30

4.1 动态代理概述..........................................................30

4.2 AopProxy代理对象的创建................................................31

第5章 结论.................................................................34

第1章 绪论

本章对IoC和AOP的概念做出简单的论述,并对Spring框架的发展历程以及Spring框架在开发中的实际应用做出相应描述。注:本论文中分析的Spring框架的版本为4.1.2。

1.1 IoC和AOP概念的提出

1.1.1 IoC概念的提出

尽管Java提供了一个方便的应用开发平台,能够实现复杂应用的多数功能,但在实际的开发过程中仍然需要由开发人员管理应用中的对象和一些服务。另外,如果某个对象的初始化依赖于另一个类或者服务,开发者的一般做法是在对象的初始化之前便将依赖的类或服务注入到对象之中。但是,被注入的类或服务可能不会被立即使用,也就是说被注入的类或服务和对象有相同的生命周期,但同时也产生了不必要的资源浪费,同时增加了对象之间的耦合度。当开发者面对的项目规模较小时,上述问题仍能较好解决,但如果项目规模变大,问题便会暴漏并会影响开发的进度和效率。那么,有没有一种较好的方式能够管理应用中的所用到的对象呢,使得当开发者在用到某个服务时,不是由开发人员提前创建,而是由这个“管理层”在需要时及时提供。提高了开发效率的同时还能够降低对象之间的耦合度。

有一个著名的“好莱坞理论”:你呆着别动,到时我会找你。对应到软件开发过程中,便是IoC模式的最形象的描述。

基于上述问题的描述,IoC(Injection of Control)控制反转得概念被提出,国际著名的面向对象分析设计、UML、模式等方面的专家,敏捷开发方法的创始人之一的Martin Fowler在2004年发表的论文中提出:“The question is,what aspect of control are inverting?”Martin Fowler首次提出有关IoC的概念。有关IoC,有另一个别名--依赖注入(Dependency Injection)。

IoC概念的提出,将调用者和被调用者解耦。将对象之间的依赖关系的管理交给IoC容器,用户在使用时只需从IoC容器中根据实际需求来获取,避免产生冗余的服务。比如:在一个Web项目中,可能存在多个模块都要从数据库中获取数据,根据传统的开发模式,通常会在每个模块中都创建“从数据库中获取数据”这个服务,但IoC概念的提出,消除了这种情况下产生的冗余数据,整个项目只需创建一个这样的“公共服务”,在用户需要的时候便调用这个公共服务,并且还方便了“公共服务”的管理过程,比如在前面提到的“从数据库获取数据”这个服务,可以在项目中对这个服务进行统一的定制:数据库最大连接

数量、超时限制等等。

Spring提供了一种消除对象之间相互嵌套相互依赖关系的方式,这种方式就是Spring提供了一个容器,用户在XML文件里定义各个对象的依赖关系,由容器完成对象的构建。当用户在Java代码里需要使用某个实例的时候就可以从容器中获取,那么对象的创建操作和销毁操作就交由Spring来处理了,所以我们将这种模式称为控制反转,控制反转的意思就是将对象的初始化、创建和管理交由Spring“这个对象管理器”来管理。依赖注入就是当用户需要某个对象时,容器会根据用户对对象的定义初始化或者创建对象,将对象注入到程序中。

1.1.2 AOP概念的提出:

在实际开发中,如果开发者希望在一个方法体的执行前和执行后进行一些额外的操作,比如日志记录、方法执行时间的统计,但是如果采用硬编码的方式将这些额外的操作写在每一个方法体内部,那么便违背了面向对象的代码重用原则,产生了冗余的代码,不利于开发过程中代码的维护。

那么,有没有一种统一的管理方式,能在指定的方法之前和之后进行上述的额外操作呢?

AOP(Aspect Oriented Programming)面向切面编程概念的提出解决了上述问题,通过这种方式弥补了面向对象编程(OOP)的不足。除了类(Class)以外,AOP提出了切面(Aspect)的概念。AOP的主要意图是将日志记录、执行时间记录、异常处理、前置(后置)处理等这些通用代码提取出来,由开发者指定具体的执行代码以及需要执行的方法体。然后由AOP管理这些代码在方法体前和方法体后的具体执行。

应用场景举例:在用户登录某个系统时,在登陆之前需要进行权限验证和身份验证,在登陆之后可能需要记录用户的登陆信息(比如登陆用户的IP、登陆时间等等),这时便可以使用到AOP。

1.2 Spring框架的发展历程

Spring 框架最开始的部分是由Rod Johnson于2000年为伦敦的金融界提供独立咨询业务时写出来的。在Rod Johnson编写出Spring框架之前,Java Web应用的主流编程模式为Java Servlet和EJB,但是EJB也存在很大的缺陷:

  1. 巨大而复杂的规格说明
  2. 增加了程序的调试时间
  3. EJB下编写的代码更加复杂
  4. 使用EJB开发的应用维护更加困难

Rod Johnson在2002年编著的《Expert one on one J2EE design and development》一书中,提出了现存的J2EE框架存在的缺陷,并进一步拓展了他的代码。在本书中,Rod Johnson编写了interface21框架,包含3万行代码,这是一个从实际出发,轻便、灵巧的轻量级开发框架。随后,Juergen Hoeller和Yann Caroff联系Rod,将书中的代码开源,Yann提出了Spring这个词,并成为这个框架的最终名称。经过重新设计,于2004年3月24日发布了1.0正式版。

您需要先支付 80元 才能查看全部内容!立即支付

企业微信

Copyright © 2010-2022 毕业论文网 站点地图