跳转至

Spring技术内幕:深入解析Spring架构与设计-计文柯

  •  Spring技术内幕:深入解析Spring架构与设计|200
  • 书名: Spring技术内幕:深入解析Spring架构与设计
  • 作者: 计文柯
  • 简介: 本书是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring开发者社区一致强烈推荐。国内第一本基于Spring 3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码中一窥Java语言的精髓。此外,本书还展示了阅读源代码的卓越方法,不仅授你以鱼,而且还授你以渔!如果你以一种淡定的心态翻开这本书,无论你是Java程序员、Spring开发者,还是平台开发人员、系统架构师,抑或是对开源软件源代码着迷的代码狂人,都能从本书中受益。
  • 出版时间 2011-01-01 00:00:00
  • ISBN: 9787111288060
  • 分类: 计算机-编程设计
  • 出版社: 机械工业出版社

高亮划线

封面

版权信息

本书赞誉

前言

如何阅读本书

致谢

第1章 准备源代码环境

第一部分 Spring核心实现篇

  • 📌 如果对面向对象系统中的对象进行简单地分类,会发现除了一部分是数据对象外,其他有很大一部分对象都是用来处理数据的。这些对象并不会经常发生变化,是系统中基础的部分。在很多情况下,这些对象在系统中以单件的形式存在就可以满足应用的需求,而且它们也不常涉及数据和状态共享的问题。如果涉及数据共享方面的问题,需要在这些单件的基础上做进一步的处理。 ^8-5237-5404

    • ⏱ 2024-05-18 14:08:13
  • 📌 FileSystemXmlApplicationContext可以从文件系统载入Resource,ClassPathXm-lApplicationContext可以从Class Path载入Resource,XmlWebApplicationContext可以在Web容器中载入Resource,等等。 ^8-25399-25552

    • ⏱ 2024-05-18 15:41:06

2.4 IoC容器的依赖注入

  • 📌 那么一定还记得在基本的IoC容器接口BeanFactory中,有一个getBean的接口定义,这个接口的实现就是触发依赖注入发生的地方 ^9-663-730
    • ⏱ 2024-05-19 13:04:58

第3章 SpringAOP的实现

  • 📌 在Spring AOP实现中,是使用Java语言来实现增强对象与切面增强应用的,并为这两者的结合提供了配置环境。对于编织配置,可以使用IoC容器来完成;对于POJO对象的配置,本来就是Spring的核心IoC容器的强项。因此,对于使用Spring的AOP开发而言,使用POJO就能完成AOP任务。但是,对于其他的AOP实现方案,可能需要使用特定的实现语言、配置环境甚至是特定的编译环境。例如在AspectJ中,尽管切面增强的对象是Java对象,但却需要使用特定的Aspect语言和AspectJ编译器。AOP体系结构的第二个层次是为语言和开发环境提支持的,在这个层次中可以看到AOP框架的高层实现,主要包括配置和编织实现两部分内容。例如配置逻辑和编织逻辑实现本身,以及对这些实现进行抽象的一些高层API封装。这些实现和API封装,为前面提到的语言和开发环境的实现提供了有力的支持。最底层是编织的具体实现模块,图3-1中看到的各种技术,都可以作为编织逻辑的具体实现方法,比如反射、程序处理、拦截器框架、类装载框架、元数据处理等。阅读完本章对Spring AOP实现原理的分析,我们会了解到,在SpringAOP中,使用的是Java本身的语言特性,比如Java Proxy代理类、拦截器这些技术,来完成AOP编织的实现。 ^10-3201-3789
    • ⏱ 2024-05-19 16:08:24

第二部分 Spring组件实现篇

  • 📌 我们看到的DispatchServlet和ContextLoaderListener提供了在Web容器中对Spring的入口,也就是说ServletContext为Spring的IoC容器提供了一个宿主环境,在这个宿主环境中建立起一个IoC容器的体系。这个IoC容器体系是通过ContextLoaderListener的初始化来建立的。然后,把DsipatchServlet这个Servlet作为Spring MVC处理Web请求的转发器建立起来,有了这些基本配置,建立在IoC容器基础上的Spring MVC就可以正常地发挥它的作用了。在了解Spring MVC在Web容器中的配置以后,我们先来看看IoC容器在Spring MVC中的启动过程是怎样实现的。 ^11-6650-6980

    • ⏱ 2024-05-20 20:12:14
  • 📌 我们称由ContextLoaderListener启动的上下文为根上下文,在这个根上下文的基础上,还有一个与Web MVC相关的上下文用来保存控制器(DispatcherServlet)需要的MVC对象,作为根上下文的子上下文,构成了一个层次化的上下文体系。 ^11-7209-7338

    • ⏱ 2024-05-20 20:13:05
  • 📌 DispatcherServlet会建立自己的上下文来持有Spring MVC的Bean对象,在建立这个自己持有的IoC容器的时候,会从ServletContext中得到根上下文作为DispatcherServlet持有上下文的双亲上下文。有了这个根上下文,然后再对自己持有的上下文进行初始化,最后把这个上下文保存到ServletContext中,供以后检索和使用。 ^11-25199-25382

    • ⏱ 2024-05-20 20:43:11
  • 📌 可以大致认为,根上下文是和Web应用相对应的一个上下文,而DispatcherServlet持有的上下文是和Servlet对应的一个上下文,在一个Web应用中,往往可以容纳多个Servlet存在。与此相对应,对于应用在Web容器中的上下体系,也是很类似的,一个根上下文可以作为许多Servlet上下文的双亲上下文。 ^11-26615-26772

    • ⏱ 2024-05-20 20:47:23
  • 📌 可以看到,这个调用关系最初是由HttpServletBean的init方法触发,这个HttpServletBean是HttpServlet的子类,接着会在HttpServletBean的子类FrameworkServlet中对IoC容器完成初始化。在这个初始化方法中,会调用DispatcherServlet的initStrategies方法,在这个initStrategies方法中,启动整个Spring MVC框架的初始化。 ^11-36766-36980

    • ⏱ 2024-05-20 20:54:24
  • 📌 这个HandlerExecutionChain的实现看起来比较简洁,它持有一个Interceptor链和一个handler的对象,这个handler对象实际上就是HTTP请求对应的Controller,在持有这个handler对象的同时,在HandlerExecutionChain中还设置了一个拦截器链,通过这个拦截器链里的拦截器,可以为handler对象提供功能的增强。而要完成这些工作,需要对拦截器链和handler都进行配置,这些配置都是在HandlerExecutionChain的初始化函数中完成的。为了维护这个拦截器链和handler,它还提供了一系列与拦截器链维护相关的一些操作,比如可以为拦截器链增加拦截器的addInterceptor方法等。HandlerExecutionChain的实现如代码清单4-14所示。 ^11-43103-43470

    • ⏱ 2024-05-20 21:03:49
  • 📌 我们看到,对请求的处理实际上是由doDispatch()来完成的,这个方法很长,但是过程简单明了,如代码清单4-20所示。这个doDispatcher方法是DispatcherServlet完成Dispatcher的主要方法,包括准备ModelAndView,调用getHandler来响应HTTP请求,然后通过执行Handler的处理来得到返回的ModelAndView结果,最后把这个ModelAndView对象交给相应的视图对象去呈现。在这里,可以看到MVC模式核心的实现,同时,也是在这里,完成了模型、视图和控制器的紧密结合。 ^11-61492-61759

    • ⏱ 2024-05-21 08:03:00
  • 📌 这个handler的请求处理过程是一个比较典型的Command模式的应用,我们下面看看Handler在DispatcherServlet中是如何取得的, ^11-67905-67981

    • ⏱ 2024-05-21 08:06:28
  • 📌 在以上的代码实现中,可以看到在DispatcherServlet取handler的时候,首先会在HttpRequest中取handler,相当于取一个缓存中的handler,这个handler对应于HTTP的HANDLER_EXECUTION_CHAIN_ATTRIBUTE属性位置,这个属性位置被定义为DispatcherServlet.class.getName() + ".HANDLER" ^11-69571-69769

    • ⏱ 2024-05-21 08:08:25

第5章 数据库操作组件的实现

第6章 Spring事务处理的实现

第7章 Spring远端调用的实现

第8章 安全框架ACEGI的实现

第三部分 Spring应用篇

读书笔记

本书评论