Spring 的核心是个轻量级容器 [18] container ),实现了 IoC Inversion of Control )模式的容器。 Spring 的目标是实现一个全方位的整合框架,在 Spring 框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代, Spring 希望提供一站式的框架整合方案。在某些情况下,利用 Spring 可以不必考虑设计模式。因为 Spring 其实就是遵从了 J2EE 的设计模式。 Spring 框架具有以下特点: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

1.       面向接口的编程。面向接口的编程使开发者事先知道他们将利用对象的方法。在设计应用时利用接口对我们获取实现的灵活性大有帮助。同时,利用接口使得各层之间的交互耦合性更为松散。

 

2.       测试更为容易。利用测试驱动开发是快速开发高质量代码的最佳途径。它利用在编写接口和实现之前先编写客户类(测试类)来驱动设计。诸如 Eclipse 这样的主流 IDE 都允许在实现测试类的同时创建类和方法。 Spring 使得测试更加容易有如下两个原因: 1) 可以在 Junit 测试用例中很容易的加载和利用 Spring 管理的 beans 。这使得我们可以像平常一样用任何客户端与这些 beans 交互。 2) 类之间没有绑定自己的依赖。这样在测试类中可以忽略 Spring ,只用设置模拟对象( mock objects )来处理依赖关系即可。

 

3.       减少耦合。为了创建一个容易维护和扩展的应用,将代码与特定的资源(例如,可能使用了针对于某个特定数据库的 SQL 函数)紧密耦合是不明智的。当然,如果有合适的函数可以迅速的实现功能时,针对于某个特定数据库通常是比较容易的。这种情况下, J2EE 设计模式通常建议使用工厂模式来减少实现类与应用之间的耦合。

 

4.       配置和绑定类之间的依赖关系。工厂模式使得我们可以轻松的从一个实现类切换到另一个实现类。接口和实现都可以配置在 XML 文件中并且可以方便的通过改变文件来改变实现类。

 

5.       支持对象 / 关系映射的工具。利用支持 ORM 类的优点就是我们不再需要写繁多的 try/catch 语句来捕获 API 抛出的异常。 Spring 将这些异常封装成为运行时的异常 (runtime exceptions) ,这样使得开发者可以在适当的时候捕获发异常。

 

使用 Spring 的优点:

1.       Spring 能消除在许多工程上对 Singleton 的过多使用。

2.       Spring 能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。

3.       Spring 能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。

4.       Spring 被设计为让使用它创建的应用尽可能少的依赖于他的 APIs 。在 Spring

5.       应用中的大多数业务对象没有依赖于 Spring

6.       使用 Spring 构建的应用程序易于单元测试。

7.       Spring 为数据存取提供了一致的框架,不论是使用 JDBC O/R mapping 产品(如 Hibernate )。

Spring 的上述优点,使得 Spring 框架成为构建信息发布系统模型层的首选框架。在本课题的实现过程中,使用了 Spring 管理的 Bean ,大大减少了代码的编写量的同时,代码质量也有很大的保证。面向接口的编程模式,使得测试同一个接口的不同实现变得容易,只需要简单的修改 Spring 的配置文件,极大地减少了编写测试代码的量。 Spring 的代理模式和面向方面编程的能力,使得拦截一个方法调用并在调用之前或者之后执行特定的操作变得简单。课题实现过程中的粗话过滤利用了 Spring 中面向方面的编程能力拦截信息插入操作,在插入操作执行之前进行粗话查询和替换,从而实现了粗话过滤。在信息插入操作执行之后进行拦截,给相关的人员发送 E-mail ,以便于通知有事件发生。 Spring 中支持事务管理,同样使用了拦截器模式,插入或者查询操作执行过程中使用事务,保证了数据库操作代码的安全性, Spring 中可以使用声明式的事务管理。对事务的所有操作都在配置文件中进行配置,无须硬编码到 Java 代码中,使得底层的数据库操作实现类只专注于正常情况下的数据库的操作,其他的事情完全由 Spring 代理,降低了代码编写的难度和复杂度,并提高了代码质量。