[b]1.面向接口编程,不重复发明轮子[/b]
接口定义的是规范,描述的是功能,在软件分层开发模式中尤为重要。一个接口,根据不同的个性化需求可以产生多个不同的实现,将接口与实现进行分离,大大降低了组件之间的耦合度,提高了组件的可测试性与相对独立性。

[b]2.基于工厂模式的IoC容器[/b]
将Java EE应用中的对象全部交由Spring的Bean工厂进行生成、装配与生命周期的管理,这所Bean工厂肩负JavaBean的实例化、依赖关系的装配及高效的生命周期管理,为Java EE程序员分担了Bean管理的艰巨任务,让Java EE程序员享受到前所未有的"衣来伸手,饭来张口"的待遇。

[b]3.面向切面编程AOP的完美实现[/b]
将业务逻辑中到处重复出现的一些诸如日志输出、事务控制及权限控制等代码全面抽取出来,集中放置到某个地方保存起来。使得Java EE程序员只要关注真正的业务逻辑处理即可,大大提高开发效率,最后在具体运行时,再由Spring的AOP模块自动完成重组,使得主业务逻辑代码与共有功能代码完美复合,最终实现我们预期的功能目标。

[b]4.提供了大量实用的Java EE企业级服务支持[/b]
Spring作为一个轻量级的Java EE技术解决方案,如何更好地规范与简化各种Java EE企业级服务的应用是至关重要的。令我们欣慰的是,Spring出色地整合了目前常用的Java EE企业级服务,例如,事务管理、持久化服务、JMS消息服务、RMI远程调用、电子邮件、WebService、任务调度与EJB支持等。

[b]5.兼容Java应用与Java Web应用[/b]
只要有Java身影的地方,就可以有Spring的用武之地。因此,不管是开发Java应用还是Java Web应用,均可受益于Spring。

[b]6.模块化的架构,满足Java EE程序员的多样化需求[/b]
Spring开发团队当时在设计Spring时,就充分考虑到了Java EE程序员的多样化需求,最终以功能模块堆砌的架构展现出来,便于Java EE程序员选择应用,提高了Spring框架的应用灵活性。例如,在基于PDA等移动终端的Java应用开发时,可仅选用Spring的IoC模块;然而,在基于PC的电子商务应用开发中,则可同时选用Spring的IoC与AOP模块,甚至Spring自带的MVC框架,仁者见仁,智者见智。

[b]7.轻重级[/b]
所谓轻量,并非论斤两、量体积。是指其运行过程中消耗资源少、开发过程轻便快捷,一切应用基于普通的JavaBean来实现,不需要专用的容器支持,面向接口编程,耦合度低,便于测试。

[b]8.全面支持Annotation注解技术,大大简化配置工作[/b]
自JDK1.5推出Annotation技术以来,所有框架都争先恐后地加入到Annotation热潮中来,向着"零配置"的巅峰冲刺。

[b]9.使用Spring自带的辅助工具类简化Java EE应用的开发,提高开发效率[/b]
例如,使用Spring提供的CharacterEncodingFilter过滤器可解决Java Web应用中的中文编码问题;使用WebApplicationContextUtils类的 getRequiredWebApplicationContext方法使得在JSP与Servlet中取得IoC容器的引用;使用 HibernateTemplate可快速方便地调用Hibernate Session完成数据库的操作;使用JdbcTemplate简化JDBC的数据库操作等。

[b]10.与Struts、Hibernate等名流框架无缝集成[/b]
尽管Spring致力于提供"一站式"服务,在MVC应用领域,大家还是会被Struts 的出色表现所折服,谈到ORM,总是忘不了Hibernate娴熟的身影。Spring宽广的胸怀,为Struts与Hibernate敞开大门,提供了极为便利的集成方式,让SSH(Spring+Struts+Hibernate)这个崭新的组合框架从此映入Java EE程序员的眼帘,成为Java EE应用开发史上的新神话。