Spring揭秘学习笔记
文章平均质量分 92
Spring揭秘学习笔记
兔子昂
如果我看得更远,那是因为我站在巨人的肩膀上。
展开
-
花4个月时间整理出《Spring揭秘》的文字版的感受
这本书从阅读角度来说,建议不要纠结某个过时的技术,对于其他书籍也是,一些不懂或者不需要你懂的部分可以先跳过,等后面接触的项目多了,遇到了实际问题就自然而然明白了。要知道,不管是技术还是管理方面的知识都是为了实际开发的,精通的目的在于应用,不要本末倒置。这本书中提到的技术距离现在已经有十几年了,以现在的视角来看,一些介绍的技术都较为老旧,但好在本书是用来讲原理的,并且在原理或是应用方面介绍得都非常详细全面(看起来有种国外书那么啰嗦,甚至我觉得有些片段是翻译来的),能让我们“知其然,更知其所以然”。......原创 2022-07-24 12:00:45 · 110764 阅读 · 1 评论 -
第33章 Spring远程方案(四)
通常情况下,SpringRemoting提供的各种ServiceAccessor以及ServiceExporter实现类已经可以满足我们大部分的应用场景需要。即使默认设置不能满足需要,通过各ServiceAccessor和ServiceExporter的相应属性设置也可以进一步定制它们的行为,但不可否认的是,总会有特殊的需求场景出现。这时,方法的MethodInvocation参数中抽取到必要的方法名、方法参数类型和方法参数值信息,然后把这些信息添加到RemoteInvocation并返回。...原创 2022-07-24 11:23:47 · 113707 阅读 · 0 评论 -
第33章 Spring远程方案(三)
SpringRemoting从最初就对JAX-RPC标准的We服务提供支持。顺应JAX-RPC的后继者JAX-WS后浪推前浪之势,Spring在2.5发布之后,又添加了对基于JAX-WS标准的Web服务的相应支持。但不管采用什么样的We服务标准,在Spring中的访问风格基本都是一致的,依然是抽象概念上的ServiceExporter和ServiceAccessor,只不过具体的实现细节不同而已。...原创 2022-07-24 11:22:00 · 113637 阅读 · 0 评论 -
第33章 Spring远程方案(二)
SpringRemoting提供了三种基于HTTP的远程方案Spring框架自行开发的HttpInvoker方案;基于Caucho的Hessian远程方案;基于Caucho的Burlap远程方案。在进一步了解每一种方案之前,我们先来从总体上分析一下,这些基于HTTP的轻量级远程方案都有哪些共通之处,或者说它们是怎么实现的。...原创 2022-07-24 11:21:10 · 113132 阅读 · 0 评论 -
第33章 Spring远程方案(一)
本章内容从“对面交谈”到“千里传声”SpringRemoting架构分析SpringRemoting提供的远程服务支持扩展SpringRemotingSpringRemoting之扩展篇。原创 2022-07-24 11:19:38 · 113171 阅读 · 0 评论 -
第32章 Spring框架对J2EE服务的集成之扩展篇
本章内容MailMonitor的延伸Spring3.0展望。原创 2022-07-24 10:53:03 · 112954 阅读 · 0 评论 -
第31章 Spring中的任务调度和线程池支持(二)
Timer是随JDK1.3的发布而引入的任务调度"标准装备”,但无论是在设计与实现上,还是在整体的功能支持上,Timer都无法与Quartz相媲美。Timer没有明确的Trigger的概念,一般意义上来讲,Timer自身肩负着Scheduler和Trigger的双重使命,而且,不像Quartz可以通过cron表达式指定复杂的调度规则。Timer基本上只提供SimpleTrigger类似的调度行为支持,所以,大部分时间,我们会优先考虑使用Quartz作为任务调度框架。喔!...原创 2022-07-24 10:46:13 · 112915 阅读 · 0 评论 -
第31章 Spring中的任务调度和线程池支持(一)
本章内容Spring与QuartzSpring对JDKTimer的集成Executor的孪生兄弟TaskExecutor在我们眼中,或许批处理(BatchProcessing)是那么的不引人注目,但不可否认的一点是,几乎所有的企业级应用程序都会或多或少地依赖于相关的批处理程序。可以说,批处理在企业级应用程序中占据重要地位,这或许也正是Spring框架的娘家Interface21(现在叫SpringSource)要特地发起SpringBatch(http。......原创 2022-07-24 10:44:11 · 112876 阅读 · 0 评论 -
第30章 使用Spring发送E-mail(二)
实际开发中,我们不可能像实例那样,直接通过字符串的拼接来创建所要发送的邮件的具体内容。更多时候,我们会使用系统指定的邮件模板。当发送给用户的邮件内容需要变更的时候(比如公司迁址,需要变更新的地址或者电话之类细节),我们不想挨个类地去改代码,而使用邮件模板的话,只要修改一下邮件模板就可以了。从现在开始,我将向你展示如何在Spring中使用其E-mail支持来发送基于模板的电子邮件。以上邮件模板内容可以vm模板文件形式保存,也可以存入数据库中。当然,该抽象接口定义并不完善。方法。...原创 2022-07-24 09:36:15 · 113622 阅读 · 0 评论 -
第30章 使用Spring发送E-mail(一)
本章内容思甜前,先忆苦Spring的E-mail抽象层分析Spring的E-mail支持在实际开发中的应用。原创 2022-07-24 09:35:20 · 112463 阅读 · 0 评论 -
第29章 Spring框架对JMS的集成(二)
外汇交易系统中大量使用JMS进行交互,比如系统与银行之间的交互,不过,这涉及银行内部的一些处理细节,通常我们是无法了解的,所以,我们改变以往的策略,转而构建一个简化版的JMS同步消息处理场景。在这个场景中,服务器端提供通用的用户验证服务,在客户端以JMS消息的形式发送验证请求之后,服务器端将接收这些验证请求并进行处理,一旦处理完毕,则将验证结果同样以JMS消息的形式发送给请求的客户端,客户端只有接收到通过验证后的反馈结果才能进行其他操作。整个情况如图29-1所示。模板方法。...原创 2022-07-23 15:20:03 · 111951 阅读 · 0 评论 -
第29章 Spring框架对JMS的集成(一)
本章内容说说JMS的身世使用JMSAPI进行应用开发的传统套路Spring改进后的JMS实战格斗术。原创 2022-07-23 15:05:30 · 112480 阅读 · 0 评论 -
第28章 Spring框架内的JNDI支持
本章内容JNDI简单回顾Spring框架内JNDI访问的基石——JndiTemplateJNDI对象的依赖注入——JndiObjectFactoryBean。原创 2022-07-23 10:40:51 · 112379 阅读 · 0 评论 -
第27章 Spring MVC之扩展篇
ConventionOverConfiguration,国内技术社区通常称其为“惯例优于配置”或者“惯例优先原则”或者其他称呼。它所倡导的理念是,如果系统中某些映射关系可以通过事先约定的规则确定,那么优先使用事先约定的规则来确定当前映射关系,这样可以避免将所有的映射关系通过配置的方式来表述,进而大大减少配置量,提高开发效率。在Java平台的ORM产品中,PO(PersistenceObject)与数据库表之间的映射关系,之前大多是通过配置文件来表述的,...原创 2022-07-21 19:12:52 · 112399 阅读 · 0 评论 -
第26章 SpringMVC中基于注解的Controller(二)
Spring框架提供的数据绑定采用JavaBean规范的PropertyEditor机制进行数据转换。大多数情况下,默认注册的PropertyEditor实现类就能够满足常见数据类型的转换需求。但特殊类型的转换情况依然存在,这时我们就需要为框架提供针对特殊数据类型转换的自定义PropertyEditor实现。在基于注解的Controller中,我们可以通过如下两种方式达到这一目的。使用@InitBinder标注的初始化方法方法。在基于注解的Controller中,做法与之相似。...}}...原创 2022-07-19 15:32:38 · 111634 阅读 · 0 评论 -
第26章 SpringMVC中基于注解的Controller(一)
在基于注解的Controller中,当前实现类将用于哪个Web请求的处理是由相应的注解标注的。比如,标注的AnyTypeYouLikeController将用于URL为的Web请求处理。这些注解中的信息,我们需要通过Java的反射机制(JavaReflection)来读取。无论是现有的BeanNameUrlHandlerMapping还是SimpleUrlHandlerMapping,显然都没有提供通过反射读取注解中映射信息的功能。Class...原创 2022-07-19 15:29:18 · 111843 阅读 · 0 评论 -
第25章 认识更多Spring MVC家族成员(五)
不管是使用Windows操作系统还是使用Linux操作系统,当我们对某种风格的桌面主题感到厌烦的时候,我们就会安装并切换到某种新的桌面主题上。对于Web应用程序来说,为了能够给用户提供更丰富的交互体验,也同样可以提供类似桌面主题的功能。实际上,不管是什么场景下的主题(Theme)功能,它们在本质上都是类似的,无非就是变更一下显示的材质风格对于操作系统的桌面主题,可能是鼠标样式或者工具条颜色等变更一下;对于Web应用程序来说,可能就是对影响整体风格显示的背景图片,或者某些固定部位的颜色做一些变更。...原创 2022-07-18 19:32:25 · 111313 阅读 · 0 评论 -
第25章 认识更多Spring MVC家族成员(四)
在EffictiveJava一书中,作者对异常处理提出了如下的一段陈述总是要单独的声明被检查的异常,并且利用Javadoc的@throws标记准确地记录下每个异常被抛出的条件。如果一个方法可能会抛出多个异常类,那么不要使用“快捷方式”,即声明它会抛出这些异常类的某个基类。作为一个极端的例子,永远不要声明一个方法“thtowsException”,或者更差的做法,“throwsThrowable”。对于类似的子类实现,使用它们的客户端代码同样可以明确所要处理的具体异常情况。方法,=""="...原创 2022-07-18 19:31:45 · 111289 阅读 · 0 评论 -
第25章 认识更多Spring MVC家族成员(三)
Spring为我们提供了现成的HandlerInterceptor固然不错,但这并不足以满足广大群众的各种需求。单就HandlerInterceptor作为一个扩展点而存在的意义来讲,如果拦截Web请求处理逻辑的需求就那么几种的话,完全没有必要设置这么一个角色。而实际上,我们所要面对的系统和场景却是繁杂多变的,所以,大部分时间,我们不得不根据应用的需求提供我们的自定义HandlerInterceptor实现类。}//getter和setter方法定义...}=""=""...原创 2022-07-18 11:26:46 · 111138 阅读 · 0 评论 -
第25章 认识更多Spring MVC家族成员(二)
最初为了降低理解的难度,我们说,HandlerMapping将会通过HandlerExecutionChain返回一个Controller用于具体Web请求的处理。现在我们要进一步澄清事实:HandlerExecutionChain中所返回的用于处理Web请求的处理对象,可以不只是Controller一种类型。在Spring MVC中,任何可以用于Web请求处理的处理对象统称为Handler。Controller是Handler的一种特殊类型。HandlerMapping通过HandlerExecution原创 2022-07-14 18:04:46 · 112204 阅读 · 0 评论 -
第25章 认识更多Spring MVC家族成员(一)
本章内容文件上传与MultipartResolverHandler与HandlerAdaptor框架内处理流程拦截与HandlerInterceptor框架内的异常处理与HandlerExceptionResolver国际化视图与LocalResolver主题(Theme)与ThemeResolver在深入讲述Spring MVC框架之前,我们先暂时跳出对框架内主要角色的认知范围,再次“鸟瞰”SpringMVC框架总体上的逻辑结构。到目前为止,我们主要认识了Spring MVC框架的五大主要角色,它们是Ha原创 2022-07-14 17:36:16 · 112032 阅读 · 0 评论 -
第24章 近距离接触SpringMVC主要角色(四)
org.springframework.web.servlet.View是SpringMVC中将原本可能存在于DispatcherServlet中的视图渲染逻辑得以剥离出来的关键组件。通过引入该策略抽象接口,我们可以极具灵活性地支持各种视图渲染技术。org.springframework.web.servlet.View的按口定义如下:各种View实现类主要的职责就是在方法中实现最终的视图渲染工作,但这些对DispatcherServlet来说是透明的,DispatcherServlet只是直接接触Vie原创 2022-07-13 20:43:39 · 111809 阅读 · 0 评论 -
第24章 近距离接触SpringMVC主要角色(三)
在使用Eclipse或者Netbeans之类的IDE进行开发的时候,如果我们新建一个工程或者文件,这些IDE通常都会提供多步的向导帮助我们一步一步完成相应部件的创建。在某些Web应用程序中,也存在类似的操作场景,比如,要注册某个网站的会员,注册过程可能就包括多步,每一步会提示输入某一方面的信息,以帮助我们简化操作流程。对于这种向导式的简单的多页面流程实现,我们可以求助于AbstractwizardFormController,它可以帮助我们简化类似场景的开发工作。说白了,AbstractWizardForm原创 2022-07-13 19:49:31 · 111753 阅读 · 0 评论 -
第24章 近距离接触SpringMVC主要角色(二)
作为“规范操作派”当门大弟子,SimpleFormController首先继承了该派“掌门人"BaseCommandController的自动数据绑定和通过Validator的数据验证功能 。不过,BaseCommandController也只传授SimpleFormController以上两种主要能力,却没有传授打通“经脉之法”。还好,BaseCommandController后继有人,AbstractFormController在BaseCommandController的“武功”基础上,发展了一套模板原创 2022-07-13 19:23:39 · 111575 阅读 · 0 评论 -
第24章 近距离接触SpringMVC主要角色(一)
本章内容忙碌的协调人HandlerMapping我们的亲密伙伴ControllerModelAndView视图定位器ViewResolver各司其职的View要恭喜你的是,即使不再继续余下的旅程,你也已经能够处理Spring MVC Web应用开发过程中80%的场景,但却可能不得不重复处理Web开发过程中的某些方面,比如Locale的设置、数据的绑定和验证、form页面的显示和提交等。 为了能够避免每个处理流程都需要实现这些东西,SpringMVC提供了更细粒度的组件支持,而这也将带给我们更加舒适的开发体验原创 2022-07-13 19:18:34 · 111387 阅读 · 0 评论 -
第23章 Spring MVC初体验(二)
如果你已经读到了这里,我完全能够理解你要实现第一个基于SpringMVC的Web应用程序的迫切心情,毕竟,一味地纸上谈兵令人腻烦,那么让我们开始一个我称之为的Web应用程序的开发吧!一个外汇交易系统与其他的软件系统在本质上没有任何差别,为了能够便于一些数据的管理,我们也需要一个用于后台管理的应用程序。既然是讲解SpringMVC,我们打算以Web应用程序的形式来开发后台管理功能,这个用于后台管理的Web应用程序我们暂且就称其为SimpleFX。因为不打算完全实现它所有的功能,只要能够通过几个功能的开发阐明S原创 2022-07-12 15:30:45 · 111205 阅读 · 0 评论 -
第23章 Spring MVC初体验(一)
本章内容鸟瞰SpringMVC实践出真知Spring MVC的优势如下:在Web层,或者确切点儿说,在框架的控制器的实现方面,SpringMVC对请求处理期间涉及的各种关注点进行了合理而完全的分离,并且明确设置了相应的角色用于建模并处理整个生命周期中的各个关注点,这包括:设置用于处理Web请求与具体请求处理控制器之间的映射匹配;设置用于国际化处理;设置用于灵活的视图选择等。而这些角色所处理的关注点,在此前的大部分Web开发框架中都没有明确划分,或者只是部分分离出来,而现在它们都是可扩展,可替换的。从表现(p原创 2022-07-12 15:29:33 · 111370 阅读 · 0 评论 -
第22章 迈向Spring MVC的旅程
本章内容Servlet独行天下的时代繁盛一时的JSP时代Servlet与JSP的联盟数英雄人物,还看今朝“子曰:温故而知新”,如果简单回顾一下整个Java平台上的Web开发历程,将极大有助于我们理解当前各个Web开发框架存在的背景和先进性,最主要的是有助于我们平滑过渡到SpringMVC的世界中去。所以,不妨让我们从最初的Servlet独行天下的时代说起。话说Servlet是当年Java平台上第一个用于Web开发的技术。相对于CGI(Common Gateway Interface)时代来说,Servlet原创 2022-07-10 20:12:29 · 111095 阅读 · 0 评论 -
第21章 Spring事务管理之扩展篇(三)
无论是Spring的参考文档,还是大多数介绍Spring的书籍,在提到使用Spring的JtaTransactionManager进行分布式事务管理的时候,都强调需要使用从应用服务器的JNDI服务获取的dataSource,而不是本地配置的普通dataSource(见图21-4)。那么原因是什么呢?我们知道,事务管理是要加之于具体的事务资源上的,所以,通常的PlatformTransactionManager的实现都会有相对应的事务资源的引用,比如,DataSourceTransactionManager需原创 2022-06-28 11:39:20 · 111072 阅读 · 0 评论 -
第21章 Spring事务管理之扩展篇(二)
Strategy模式的本意是封装一系列可以互相替换的算法逻辑,使得具体算法的演化独立于使用它们的客户端代码。 为了理解为什么要这么做,我们不妨来看如下这个具体的场景。在一个信贷系统中,通常会提供多种还款方式,比如等额本金还款方式、等额本息还款方式、一次还本付息方式等,那么,针对每位顾客所选择的还款方式,我们就需要按照这些还款方式的具体逻辑,为顾客计算每次所需要归还的本金以及利息的额度。如果要我们来实现这个根据还款方式计算额度的逻辑,我们会怎么做呢?对于谙熟结构化编程或者面向对象编程不甚娴熟的开发人员来说,他原创 2022-06-28 11:37:13 · 110803 阅读 · 0 评论 -
第21章 Spring事务管理之扩展篇(一)
本章内容理解并活用ThreadLocal谈Strategy模式在开发过程中的应用Spring与JTA背后的奥秘之前在事务管理器实现原型的讲解中,我们展示了ThreadLocal在Spring的事务管理框架中所起的核心作用,即通过ThreadLocal的使用来避免connection-passing方式最初的尴尬局面。不过,我们依然认为,这只是反映了ThreadLocal使用中的一个侧面。为了让大家更加深入地理解ThreadLocal,并在之后的开发活动中灵活使用它,特增加了本章内容。Threadlocal是原创 2022-06-28 11:29:46 · 110912 阅读 · 0 评论 -
第20章 使用Spring进行事务管理(三)
TransactionProxyFactoryBean是专门面向事务管理的ProxyFactoryBean,它直接将TransactionInterceptor纳入自身进行管理。 使用TransactionProxyFactoryBean代替ProxyFactoryBean进行声明式事务管理,不需要单独声明TransactionInterceptor的bean定义,有关事务的元数据、事务管理器等信息,全都通过TransactionProxyFactoryBean的bean定义指定就可以。这样,同样针对Quo原创 2022-06-27 16:41:30 · 110872 阅读 · 0 评论 -
第20章 使用Spring进行事务管理(二)
直接使用编程式事务管理的不足就是,事务管理代码与业务逻辑代码相互混杂。而声明式事务管理则可以避免这种不同系统关注点之间的纠缠,使得事务管理代码不用再去影响具体业务逻辑的实现。声明式事务实际上并没有想象中那么神秘,在我们将事务管理这一横切关注点从原来硬编码事务管理逻辑的系统中剥离出来后,就会发现,声明式事务已经在“幸福终点站”那里等着我们了。先不管Spring是如何提供声明式事务管理的。如果要我们从原来硬编码事务管理的系统中,将这些事务管理相关的代码从业务对象中剥离出来,我们会怎么做?最土的一个办法是,为每个原创 2022-06-27 15:32:24 · 111117 阅读 · 0 评论 -
第20章 使用Spring进行事务管理(一)
本章内容:事务管理的实施通常有两种方式,即编程式事务管理和声明式事务管理。对于这两种事务管理方式的支持,Spring事务框架可以说是青出于蓝而胜于蓝。通过Spring进行编程式事务管理有两种方式,要么直接使用PlatformTransactionManager,要么使用更方便的TransactionTemplate。二者各有优缺点,但总体上来说,推荐使用TransactionTemplate进行编程式事务管理。PlatformTransactionManager接口定义了事务界定的基本操作,我们可以直接使用原创 2022-06-24 13:23:20 · 110929 阅读 · 0 评论 -
第19章 Spring事务王国的架构(五)
当然,这期间也会涉及事务定义的应用以及条件检查等逻辑。在所有一切搞定之后,newTransactionStatus会创建一个包含definition、transaction object以及挂起的事务信息和其他状态信息的DefaultTransactionStatus实例并返回。如果definition定义的传播行为是PROPAGATION_NESTED,根据情况创建嵌套事务,如通过Savepoint或者JTA的TransactionManager。如下:在这种情况下,会首先通过方法检查AbstractP原创 2022-06-19 15:34:16 · 110932 阅读 · 0 评论 -
第19章 Spring事务王国的架构(四)
PlatformTransactionManager的各个子类在实现时,基本上遵循统一的结构和理念。所以,我们不妨选择以DataSourceTransactionManager这一实现类作为切入点,以管中窥豹之势,一探Spring的抽象事务框架中各个PlatformTransactionManager实现类的奥秘所在。不过,在开始之前,我们有必要先了解如下几个概念。将它们与JTA规范中定义的接口相提并论,是因为这些概念只限于局部场景中对应的PlatformTransactionManager实现类使用,而J原创 2022-06-19 15:27:53 · 110778 阅读 · 0 评论 -
第19章 Spring事务王国的架构(三)
org.springframework.transaction.TransactionStatus接口定义表示整个事务处理过程中的事务状态,更多时候,我们将在编程式事务中使用该接口。在事务处理过程中,我们可以使用TransactionStatus进行如下工作。使用TransactionStatus提供的相应方法查询事务状态。通过setRollbackOnly()方法标记当前事务以使其回滚。如果相应的PlatformTransactionManager支持Savepoint,可以通过TransactionSt原创 2022-06-19 15:24:53 · 110945 阅读 · 3 评论 -
第19章 Spring事务王国的架构(二)
Spring的事务抽象包括3个主要接口,即PlatformTransactionManager、TransactionDefinition以及TransactionStatus,它们之间的关系如图19-4所示。这3个接口以PlatformTransactionManager为中心,互为犄角,多少有点儿“晋西北铁三角”的味道。PlatformTransactionManager负责界定事务边界。TransactionDefinition负责定义事务相关属性,包括隔离级别、传播行为等。PlatformTrans原创 2022-06-11 14:01:16 · 110743 阅读 · 2 评论 -
第19章 Spring事务王国的架构(一)
本章内容统一中原的过程和平年代Spring的事务框架将开发过程中事务管理相关的关注点进行适当的分离,并对这些关注点进行合理的抽象,最终打造了一套使用方便,却功能强大的事务管理“利器”。通过Spring的事务框架,我们可以按照统一的编程模型来进行事务编程,却不用关心所使用的数据访问技术以及具体要访问什么类型的事务资源。并且,Spring的事务框架与Spring提供的数据访问支持可以紧密结合,更是让我们在事务管理与数据访问之间游刃有余。而最主要的是,结合Spring的AOP框架,Spring的事务框架为我们带来原创 2022-06-08 22:04:07 · 110919 阅读 · 0 评论 -
第18章 群雄逐鹿下的Java事务管理
本章内容Java平台的局部事务支持Java平台的分布式事务支持继续前行之前的反思对于应用程序的开发人员来说,更多的时候,我们只是通过相应产品提供的API接口来访问事务资源,并考虑如何在应用的业务逻辑中界定事务边界,而对于各提供商如何在产品中实现事务支持,通常不是我们需要关心的问题。本章内容将更多地讲述各事务处理场景下,我们可以通过哪些产品提供的事务处理接口或者标准的事务处理接口来进行事务控制。当然,期间我们也可能提及相应场景下比较受欢迎的几款事务处理的产品实现。下面将按照从局部事务场景到全局事务场景的顺序,原创 2022-06-01 19:05:54 · 111160 阅读 · 0 评论