Spring包含许多功能和特性,并被很好地组织在下图所示的七个模块中。本节将依次介绍每个模块.
Core包是框架的最基础部分, 并提供依赖注入(Dependency Injection)特性来使你可管理Bean容器功能。 这里的基础概念是BeanFactory,它提供Factory模式来消除对程序性单例的需要, 并允许你从程序逻辑中分离出依赖关系的配置和描述。
构建于Beans包上Context包,提供了一种框架式的Bean访问方式, 有些象JNDI注册。Context包的特性得自Beans包,并添加了文本消息的发送,通过比如资源串, 事件传播,资源装载的方式和Context的透明创建,如通过Servlet容器。
DAO包提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 该包也提供了一种方法实现编程性和声明性事务管理,不仅仅是针对实现特定接口的类, 而且对所有的POJO。
ORM包为流行的关系-对象映射APIs提供了集成层,包括JDO,Hibernate和iBatis。 通过ORM包,你可与所有Spring提供的其他特性相结合来使用这些对象/关系映射, 如前边提到的简单声明性事务管理。
Spring的AOP包提供与AOP联盟兼容的面向方面编程实现,允许你定义, 如方法拦截器和切点,来干净地给从逻辑上说应该被分离的功能实现代码解耦。 使用源码级的元数据功能,你可将各种行为信息合并到你的代码中,有点象.Net的attribute。
Spring的Web包提供了基本的面向Web的综合特性,如Multipart功能, 使用Servlet监听器的Context的初始化和面向Web的Applicatin Context。 当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。
Spring的Web MVC包提供了面向Web应用的Model-View-Controller实现。 Spring的MVC实现不仅仅是一种实现,它提供了一种domain model代码和web form的清晰分离, 这使你可使用Spring框架的所有其他特性,如校验.
利用积木方式来描述你在各种场合使用Spring的情况, 从Applet一直到完整的使用Spring的事务管理功能和Web框架的企业应用。
一个典型的使用大部分Spring特性的Web应用。使用TransactionProxyFactoryBeans, Web应用是完全事务性的,就像使用EJB提供的那种容器管理的事务一样. 所有的你的自定义业务逻辑可以通过简单的POJO来实现,并通过Spring的Dependency Injection容器进行管理。其他的服务,如发送email和校验,独立于Web层, 使你能够决定在哪里执行校验规则。 Spring的ORM支持包含了Hibernate,JDO和iBatis。如使用HibernateDaoSupport, 你可复用已经存在的Hibernate映射。从Controller无缝整合web层和领域模型, 消除对ActionForms的需要和其他转换HTTP参数为领域模型的类。
有时,现有情况不允许你彻底地转换到一种不同的框架。Spring没有 强迫你使用它的全部,它不是一种全有全无 的解决方案。现有的使用WebWork,Struts,Tapestry或其他的UI框架的前端程序可极佳的 与基于Spring的中间层进行集成,使你可使用Spring提供的事务处理特性。 你唯一要做的事是使用ApplicationContext来挂接你的业务逻辑和 通过WebApplicationContext来集成你的Struts前端程序。
当你需要通过WebService来访问你的现有代码时, 你可使用Spring的Hessian-,Burlap-, Rmi- 或者 JaxRpcProxyFactory类。 使得突然给现有应用增加远程访问时不再那么困难。
Spring也为EJB提供了访问层和抽象层, 使你可复用已存在的POJO并将他们包装在Stateless SessionBean中, 以便在可能需要声明式安全(EJB中的安全管理,译者注)的可升级的可容错的Web应用中使用。