Spring是封装的很清晰的一个分层架构,Spring架构图如下:
包含最为基本的IoC
容器BeanFactory
的接口与实现,在这个Spring
的核心包中,不仅定义IoC
容器的最基本接口(BeanFactory
),也提供一 系列这个接口的实现,如XmlBeanFactory
就是一个最墓本的BeanFactory
(IoC
容器),从名字上可以看到,它能够支持通过XML
文件配置的Bean
定义信息。
除此之外,Spring IoC
容器还提供了一个容器系列,如SimpleJndiBeanFactory
, StaticListableBeanFactory
等。为了让应用更方便地使用IoC
容器,还需要在IoC
容器的外围提供其他的支持,这些支持包括Resource
访问资源的抽象和定位等。
另外,在BeanFactory
接口实现中,除了前面介绍的像BeanFactory
那样最为基本的容器形态之外,Spring
还设计了loc
容器的高级形态ApplicationContext
应用上下文供用户使用,这些ApplicationContext
应用上下文.如FileSystemXmlApplicationContext
,ClassPathXmlApplicationContext.
对应用来说,是IoC
容器中更面向框架的使用方式, 同样,为了便于应用开发,像国际化的消息源和应用支持事件这些特性,也都在这个模块中配合IoC
容器来实现。
这也是Spring
的核心模块,围绕着AOP
的增强功能,Spring集成了AspectJ
作为AOP
的一个特定实现,同时还在JVM
动态代理/CGLIB
的基础上,实现了一个AOP
框架,作为Spring
集成其他模块的工具,比如TransactionProxy FactoryBean
声明式事务处理,就是通过AOP
集成到Spring
中的。
在这个模块中,Spring AOP
实现了一个完整的建立AOP
代理对象,实现AOP
拦截器,直至实现各种Advice
通知的过程。在对这个模块中,AOP模块的完整实现是我们熟悉AOP实现技术的一个不可多得的样本。
对于大多数企业应用而言,Web
应用已经是一种普遍的软件发布方式,而在Web
应用的设计中,MVC
模式已经被广泛使用了。在Java
的社区中,也有很多类似的MVC
框架可以选择,而且这些框架往往和Web UI
设计整合在一起,对于定位于提供整体平台解决方案的Spring
,这样的整合也是不可缺少的。
Spring MVC
就是这样一个模块,这个模块以DispatcherServlet
为核心,实现了MVC
模式,包括怎样与Web
容器环境的集成,Web
请求的拦截、分发、处理和ModelAndView
数据的返回,以及如何集成各种UI
视图展现和数据表现,如PDF, Excel
等,通过这个模块,可以完成Web
的前端设计。
:在企业应用中,对以关系数据库为基础的数据的处理是企业应用的一个重要方面.而对于关系数据库的处理,Java
提供了JDBC
来进行操作,但在实际的应用中,单纯使用JDBC
的方式还是有些繁琐,所以在JDBC
规范的基础上,Spring
对JDBC
做了一层封装,使通过JDBC
完成的对数据库的操作更加简洁。Spring JDBC
包提供了JdbcTemplate
作为模板类,.封装了基本的数据库操作方法,如数据的查询、更新等.另外,Spring JDBC
还提供了RDBMS
的操作对象,这些操作对象可以使应用以更面向对象的方法来使用JDBC
,比如可以使用MappingSqlQuery
将数据库数据记录直接映射到对象集合,类似一个极为简单的ORM
工其。
除了通过Spring JDBC
对数据库进行操作外,Spring
还提供了许多对ORM
工具的封装,这些封装包括了常用的ORM
工具,如Hibernate
,iBatis
等,这一层封装的作用是让应用更方便地使用这些ORM
工具,而不是替代这些ORM
工具,比如可以把对这些工具的使用和Spring
提供的声明式事务处理结合起来。同时,Spring
还提供了许多模板对象,如HibernateTemaplate
这样的工具来实现对Hibernate
的驱动,这些模板对象往往包装使用Hibernate
的一些通用过程,比如Session
的获取和关闭、事务处理的关联等,从而把一些通用的特性实现抽象到Spring
中来,更充分地体现了Spring
的平台作用。
Spring
事务处理是一个通过Spring AOP
实现自身功能增强的典型模块。在这个模块中,Spring
把在企业应用开发中事务处理的主要过程抽象出来,并且简洁地通过AOP
的切面增强实现了声明式事务处理的功能。这个声明式事务处理的实现,使应用只需要在IoC
容器中对事务属性进行配置即可完成,同时,这些事务处理的基本过程和具体的事务处理器实现是无关的,也就是说,应用可以选择不同的具体的事务处理机制,如JTA
, JDBC
, Hibernate
等。因为使用了声明式事务处理.这些具体的事务处理机制被纳入Spring
事务处理的统一框架中完成,并完成与具体业务代码的解耦,在这个模块中,可以看到一个通用的实现声明式事务处理的基本过程,比如怎样配置事务处理的拦截器,怎样读入事务配置属性,并结合这些事务配置属性对事务对象进行处理,包括事务的创建、挂起、提交、回滚等基本过程,还可以看到具体的事务处理器(如DataSourceTransactionManager
、ibernateTransactionManager
、JtaTran s actionMan ager
等)是怎样封装不同的事务处理机制(JDBC
, Hibernate
, JTA
等)的。
Spring
为应用带来的一个好处就是能够将应用解耦。应用解耦,一方面可以降低设计的复杂性,另一方面,可以在解耦以后将应用模块分布式地部署,从而提高系统整体的性能。在后一种应用场景下,会用到Spring
的远端调用,这种远端调用是通过Spring
的封装从Spring
应用到Spring
应用之间的端到端调用。在这个过程中,通过Spring
的封装,为应用屏蔽了各种通信和调用细节的实现,同时,通过这一层的封装,使应用可以通过选择各种不同的远端调用来实现,比如可以使用HTTP
调用器(以HTTP
协议为基础的),可以使用第三方的二进制通信实现Hessian/Burlap
,甚至还封装了传统Java
技术中的RMI
调用。
从严格意义上来说,这个模块不属于Spring
的范围。这部分的应用支持,往往来自一些使用得非常广泛的Spring
子项目,或者该子项目本身就可以看成是一个独立的Spring
应用,比如为Spring
处理安全问题的Spring ACEGI
后来转化为Spring
子项目的Spring Security OAuth
等。
这个Spring
应用支持的部分还有一个重要的组成,那就是包括了其他的一些模块,这些模块提供了许多 Spring
应用与其他技术实现的相关接口,比如与各种J2EE
实现规范的接口,对JMS
, JNID
,JMX
, JavaMail
等的支持,Spring
应用和Flex
前端的接口,Spring
应用移植到OSGi
平台上运行的接口,通过这个模块的支持,使Spring
应用可以便利和简洁地容纳第三方的技术实现,不但丰富了Spring
应用的功能,而且丰富了整个Spring
生态圈,使Spring
应用得越来越广泛。
先了解Spring Framework基本架构,以后看源码就从这几个方面着手。