2.1 Spring基本介绍
在没有程序框架的时期,各程序框架一般由程序人员自己来写,由于这种情况不利于程序的维护和后期的调整,而且效率偏低。后来,框架慢慢出现,大大提高了项目开发的效率以及维护的方便性,接下来就深入学习Spring MVC框架。
2.1.1 Spring是什么
Spring是一个Java企业级应用的开源开发框架,主要用来开发Java应用,但是有些扩展是针对J2EE平台的Web应用。Spring框架的目标是简化Java企业级应用开发,并通过以POJO为基础的编程模型帮助程序员培养良好的编程习惯。
2.1.2 Spring的起源
Rod Johnson在2002年出版的Expert one on one J2EE design and development一书中,对Java EE框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极探索革新Spring之道。Rod Johnson以此书为指导思想编写了interface21框架,这是一个力图冲破J2EE传统开发困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日发布了1.0正式版。同年,他又出版了一部堪称经典的力作Expert one-on-one J2EE Development without EJB,该书在Java世界掀起了轩然大波,改变了Java开发人员程序设计和开发的思考方式。在该书中,作者根据自己多年丰富的实践经验,对EJB的各种笨重、臃肿的结构进行了逐一的分析和否定,并分别以简洁、实用的方式代替。至此,Rod Johnson成为一个改变Java世界的大师级人物。
2.1.3 Spring的特点
在Java程序开发过程中,使用框架可以大大地提高开发的效率,其中Spring框架运用较为广泛,其优点主要有以下几点。
(1)降低耦合度,简化开发过程,实现软件各层之间的解耦。
通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,程序开发人员不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
(2)容器提供了多种服务,如事务管理服务。
Spring可以把程序开发人员从单调、烦闷的事务管理代码中解脱出来,通过声明的方式灵活地进行事务管理,提高开发效率和质量。
(3)容器会提供对单例模式的支持,开发人员不需要自己编写代码。
(4)运用Spring框架可以更好地进行项目测试。
可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如,Spring对Junit4支持可以通过注解方便地测试Spring程序。
(5)Spring对主流框架提供了集成支持。
Spring不排斥各种优秀的开源框架,相反Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts、Mybaties、Hibernate、Hessian、Quartz、JPA)等的直接支持。
(6)AOP编程的支持。
通过Spring提供的AOP功能,可以方便地进行面向切面的编程,许多用传统OOP不容易实现的功能可以通过AOP轻松实现。
2.1.4 Spring的框架结构
(1)Spring Core:Spring的核心功能,使用IoC容器解决对象创建及依赖关系问题,包含并管理应用对象的配置和生命周期。
(2)Spring DAO:Spring对JDBC的支持,可使用JDBCTemplate来简化数据操作。
(3)Spring ORM:Spring对ORM的支持,提供了对主流对象映射关系框架的支持,以及与多个第三方持久层框架的良好整合。
(4)Spring AOP:切面编程,减少了非业务代码的重复性,降低了模块之间的耦合,如事务管理、日志、权限验证。
(5)Spring Web:Spring对Web模块的支持。
(6)Spring JEE:Spring对Java EE其他模块的支持,如EJB、JMS等。
图2-1 Spring的框架结构
2.1.5 Spring在项目中的作用
Spring是一个轻量级容器,轻量级是相对于重量级来说的。在Spring出现之前,企业级开发一般采用EJB重量级容器,因为它提供了事务管理、声明式事务支持、持久化、分布式计算等简化了的企业级应用开发。重量级容器是侵入式的。也就是说,要使用EJB提供的功能必须在代码中体现出来,例如继承一个接口、声明一个成员变量。轻量级容器是非侵入式的,Spring开发系统中的类不需要依赖Spring的类,不需要容器支持,因为Spring本身就是一个容器。
在SSM框架中,Spring承担了管理容器的任务。MyBatis用来做持久层,Struts用来做应用层。这时,使用Spring框架就起到了控制Action对象(Struts中的)和Service类的作用,两者之间的关系就松散了,Spring的IoC机制(控制反转和依赖注入)正是用在此处。
在Spring中进行事务处理时,可以不再由程序开发人员通过手写管理,而是以特定方式将异常的事务回滚、数据提交等复杂操作交给Spring容器进行管理。Spring容器实现事务管理,从而大大减少了程序开发人员的代码编写量。
Spring容器不仅可以控制自己本身的事务,还可以通过applicationContext.xml配置文件控制MyBatis中的事务。