早就听说SSH框架,今天终于下定决心开始学习其中的S——Spring。其实,spring最核心的特性就是依赖注入(dependency injection)和面向切片编程(aspect-oriented programming, AOP)。
当年Sun推出JavaBean的时候旨在将简单的java对象更好地复用并用于复杂应用之中,但JavaBean功能似乎太过简单以至于它无力完成真正意义上的企业级开发。通常情况下复杂的企业应用都需要诸如事务,安全性和分布式计算等服务的支持,而这些JavaBean都是不提供的。所以Sun在1998年发布了EJB,即企业版的JavaBean。EJB的确提供了一组企业级服务,但还是没有简化原始的JavaBean。
事实上,EJB并没有简化企业应用开发,这也促使很多开发人员对其并不是十分感兴趣。不过Java组件开发终于落叶归根。包含AOP和DI在内的新技术赋予了JavaBean许多EJB才拥有的功能,当然他们可没有EJB那么复杂。
一般意义认为POJO即JavaBean,而Spring框架便是倡导轻量级的基于POJO的开发。
什么是Spring?Spring是一个开源框架。spring可以让我们只是用纯JavaBean来实现以前必须是EJB才能实现的功能。当然,spring并不只是用于服务器端的开发。
spring就是一个轻量级的DI和AOP的框架。spring是非侵犯式的:使用了Spring的应用中的对象通常都不回依赖于spring特定的类。
DI:spring使用DI来实现松耦合。和JNDI相反,对象不会去查询依赖性而是被动地被赋予依赖性。
spring是一个容器,它可以包含和管理应用对象的生命周期和配置。在spring中,你可以声明你的应用对象以何种方式被创建,被管理以及如何相互联系。
spring中应用对象以声明的方式被组合在一起,通常是放入xml文件中。另外,spring还提供了很多基础性的功能(例如,事务管理,持久性框架集等)。
所有的模块都是搭建在Core这个容器之上。Core容器定义了javabean被创建、配置、管理的方式,而这些基本上是spring的主要组成部分。
Core容器
包含BeanFactory——它是最基本的spring容器,也是spring的DI的基础。
Application Context模块
因为它,spring可以被称之为框架(framework)。这个模块扩展了BeanFactory的概念,添加了对国际化(i18n)消息,应用周期事件和验证机制的支持。该模块还提供了许多企业级的服务,如,Email,JNDI访问,EJB集成,远程访问和调度。它还可以提供了与其他模板框架的集成功能。
AOP模块
该模块提供了一些方法来构建切片。
JDBC抽象层和DAO模块
Spring的JDBC和DAO模块抽取出了一般JDBC是要用到的样本代码,开发人员不必重新实现它们。该模块还完善了错误消息机制,使定位问题更加容易。另外,这个模块使用AOP模块提供了对象的事务管理方面的服务。
对象关系映射(ORM)集成模块
提供了一些钩子(hook)来实现与主流ORM框架(Hibernate等)的集成。Spring的事务管理和支持JDBC一样支持每个ORM框架。
Java管理扩展(JMX)Spring的JMX模块帮助开发人员开发JMX MBean,另外还可以监控和重配置一个处于运行状态的应用程序。
JCA模块
JCA可以整合包含主机和数据库在内的企业信息系统中的各种企业应用。Spring的JCA和它的JDBC模块相似,它抽取出JCA中样本代码封装成模板供开发人员使用。
MVC框架
提供了与主流MVC框架(如Struts)的支持,当然它也有自己的MVC框架。
Portlet MVC
提供了一组控制器来支持Java portlet的API
Web模块
Web模块分别提供了对Spring MVC和Spring Portlet MVC的支持。该模块提供了对于面向web任务的支持以及对Struts和JSF的支持。
Remoting模块
Remoting模块允许java对象作为远程对象来使用,就像本地的Pojo一样。
JMS模块
Remoting依赖于网络的稳定。面向消息的通讯更加可靠。JMS模块发送消息给JMS消息队列。同时消息队列创建可以处理异步消息的消息驱动POJO。
尽管spring包含很多东西,但它总是尽量避免去实现那些已有的东西。例如,spring并不会去实现一个持久化框架,相反,它提供了与其他框架的集成功能。