Spring源码学习之spring设计理念和整体架构

1.Spring的设计理念:在Java EE的应用开发中,支持POJO和使用JavaBean的开发方式, 使应用面向接口开发,充分支持00 ( 面向对象) 的设计方法。

2.Spring的整体架构:

1.SpringloC:包含了最为基本的IoC容器BeanFactory的接口与实现,也就是说,在这个Spring的核心包中,不仅定义了IoC容器的最基本接口(BeanFactory),也提供了一系列这个接口的实现,如XmlBeanFactory就是一个最基本的BeanFactory (IoC容器),从名字上可以看到,它能够支持通过XML文件配置的Bean定义信息。除此之外,SpringIoC容器还提供了一个容器系列,如SimpleJndiBeanFactory、 StaticLismbleBeanFactor等。我们知道,单纯一个IoC容器对于应用开发来说是不够的.为了让应用更方便地使用IoC容器 ,还需要在IoC容器的外围提供其他的支持 ,这些支持包括Resource访问资源的抽象和定位等 ,所有的这些 ,都是这个Spring IoC模块的基本内容。另外,在BeanFactory接口实现中,除了前面介绍的像BeanFactory那样最为基本的容器形态之夕外,Spring还设计了IoC容器的髙级形态ApplicaticmContext应用上下文供用户使用,这些ApplicationConlext应用上下文 ,如FileSystemXmlApplicationContext,ClassPathXmlAppIicationContext,对应用来说, 是IoC容器中更面向框架的使用方式,同样,为了便于应用开发,像国际化的消息源和应用支持事件这些特性,也都在这个
模块中配合IoC容器来实现,这些功能围绕着IoC基本容器和应用上下文的实现,构成了整个Spring IoC模块设计的主要内容。

2.SpringAOP: 这也是Spring的核心模块, 围绕着AOP的增强功能,Spring集成了AspectJ作为AOP的一个特定实现,同时还在JVM动态代理/CGLIB的基础上, 实现了—个AOP框架 ,作为Spring集成其他模块的工具,如TransactionProxyFactoryBean
声明式事务处理,就是通过AOP集成到Spring中的。在这个模块中,Spring AOP实现了一个完整的建立AOP代理对象,实现AOP拦截器,直至实现各种Advice通知的过程。在对这个模块的分析中可以看到,AOP模块的完整实现是我们熟悉AOP实现技术的一
个不可多得的样本。

3.Spring MVC:对于大多数企业应用而言, Web应用已经是一种普遍的软件发布方式,而在Web应用的设计中, MVC模式已经被广泛使用了。 在java的社区中,也有很多类似的MVC框架可以选择,而且这些框架往往和WebUI设计整合在一起,对于定位于提供整体平台解决方案的Spring,这样的整合也是不可缺少的。Spring MVC模块以DispatcherServlet为核心,实现了MVC模式,包括怎样与Web容器环境的集成,Web请求的拦裁.分发、处理和ModelAndView数据的返回,以及如何集成各种UI视图展现和数据表现,如PDF,Excel等, 通过这个模块,可以完成Web的前端设计。

4.Spring JDBC/SpringORM:对于关系数据库的处理, Java提供了JDBC来进行操作,但在实际的应用中,单纯使用JDBC的方式还是有些繁琐, 所以在JDBC规范的基础上,Spring对JDBC做了一层封装,使通过JDBC完成的对数据库的操作更加简洁, SpringJDBC包提供了JdbcTemplale作为模板类 ,封装了基本的数据库操作方法,如数据的査询、更新等,另外, SpringJDBC还提供了RDBMS的操作对象,这些操作对象可以使应用以更面向对象的方法来使用JDBC, 比如可以使用MappingSqlQuery将数据库数据记录直接映射到对象集合,类似一个极为简单的ORM 工具。
除了通过SpringJDBC对数据库进行操作外,Spring还提供了许多对ORM工具的封装, 这些封装包括了常用的ORM工具,如Hibernate iBatis等,这一层封装的作用是让应用更方便地使用这些ORM 工具,而不是替代这些ORM工具,比如可以把对这些工具的使用和Spring提供的声明式事务处理结合起来。同时, Spring还提供了许多模板对象,如HibernateTemaplate这样的工具来实现对Hibernate的驱动,这些模板对象往往包装使用Hibernate的一些通用过程,比如Session的获取和关闭、事务处理的关联等,从而把一些通用的恃性实现抽象到Spring中来,更充分地体现了Spring的平台作用。

5.Spring事务处理:Spring事务处理是一个通过Spring AOP实现自身功能增强的典型模块。在这个模块中, Spring把在企业应用开发中事务处理的主要过程抽象出来。这个声明式事务处理的实现,使开发人员只需要在IoC容器中对事务属性进行配置即可完成,同时, 这些事务处理的基本过程和具体的事务处理器实现是无关的,也就是说,应用可以选择不同的具体的事务处理机制,如JTA,JDBC, Hibernate等。 因为使用了声明式事务处理.具体的事务处理机制被纳入Spring事务处理的统一框架中完成 , 并完成与具体业务代码的解耦。 在这个模块中,可以看到一个通用的实现声明式事务处理的基本过程,比如怎样配置事务处理的拦截器,怎样读人事务配置属性, 并结合这些事务配置属性对事务对象进行处理,包栝事务的创建、挂起、提交、回滚等基本过程, 还可以看到具体的事务处理器(DataSourceTransactionManage,
HibernateTransactionManager、JtaTransactionManager等) 是怎样封装不同的事务处理机制(JDBC、 Hibernate, JTA等) 的。

6.Spring远端调用:Spring为应用带来的一个好处就是能够将应用解耦。应用解耦,一方面可以降低设计的复杂性,一方面,可以在解耦以后将应用模块分布式地部署,从而提髙系统整体的性能。 在后一种应用场景下, 会用到Spring的远端调用, 这种远
端调用是通过Spring的封装从Spring应用到Spring应用之间的端到端调用,在这个过程中,通过Spring的封装, 为应用屏蔽了各种通信和调用细节的实现,同时. 通过这一层的封装 ,使应用可以通过选择各种不同的远端调用来实现, 比如可以使用HTTP
调用器(以HTTP协议为基础的), 可以使用第三方的二进制通信实现Hessian/Burlap甚至还封装了传统Java技术中的RMI调用。

7.Spring应用。

小结:在我们平时的开发中,用到最多的场景就是使用SSH框架来完成企业应用的开发,取代传统的EJB笨重的开发模式。在SSH架构中 Struts作为Web UI层、 Spring作为中间件平台, Hibernate作为数据持久化工具(ORM工具) 来操作关系数据库。在这个架构中, Hibernate是一个独立的ORM数据持久化产品。比较Spring JDBC和Hibernae对数据库操作的支持,对Spring来说,其对数据持
久化的支持,虽然也有JDBC的封装,可以完成一些将简单的数据记录到Java数据对象的转换和映射工作,但和Hibernate相比, 功能上毕竞还是有一些单薄,比如Hibernate还提供了各种数据的査询、方便的对象和关系数据的映射等。因此,在大多数应用中,将Hibernate和Spring—起使用是非常普遍的,因为一方面Hibenate提供了完整的和已经成为事实标准的功能,另一方面, Spring也提供了与Hibernated的集成和封装,包括声明式事务处理的封装等。对于Web 层而言,尽管Spring提供了自己的MVC实现,但与Struts的流行程度相比,这个Spring MVC的使用并不广泛, 毕竟在Web开发领域, Struts成名更早。在这个架构组合中,Spring起到的是一个应用平台的作用,通过Spring的集成,可以让应用在直接部署在Tomcat这个Web服务器上 ,因为作为一个直接依赖JVM的轻量级框架, Spring的部署方式就是一个简单的jar包, 不需要以一个J2EE应用服务器的形式出现,从而使整个应用在Tomcat这样的Web服务器上直接运行起来,非常简洁。

Spring的优点:
1.非侵入性:其目标是使应用程序代码对框架的依赖最小化,应用代码可以在没有Spring或者其他容器的情况下正常运行
2.一致性的编程:使应用直接使用POJO开发 ,从而可以与运行环境 (如应用服务器) 隔离开来。
3.Spring推动应用的设计凤格向面向对象及面向接口编程转变,提髙了代码的重用性和可测试性。
4.Spring改进了体系结构的选择,虽然作为应用平台, Spring可以帮助我们选择不同的技术实现, 比如从Hiberante到其他ORM工具,从Struts切换到Spring MVC,尽管我们通常不会这样做,但是我们在技术方案上选择使用Spring作为应用平台, Spring至少为我们提供了这种可能性和选择, 从而降低了平台锁定的风险。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值