Spring的基本应用
Spring概述
Spring从2004年发布第一个版本已经十几年了。Spring是由Rod Johnson组织和开发的,一个分层的JavaSE/EE轻量级框架,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为内核。在Spring中,认为一切Java类都是资源都是类的实例对象(Bean),容纳并管理这些Bean的是Spring所提供的IoC容器,所以Spring是一种基于Bean的编程,它深刻改变着Java开发世界,使用基本的JavaBean来完成以前只有EJB才能完成的工作,避免了EJB臃肿、低效的开发模式,因此迅速地取代EJB成为了实际的开发水准。
Spring是一个轻量级框架,它大大地简化了Java企业级开发,提供了强大、稳定的功能,又没有带额外的负担,让使用Spring的人做每一件事情的时候都有得体和优雅的感觉。Spring致力于Java EE应用各层的解决方案,而不是仅仅专注于某一层的解决方案。在表现层它提供了Spring MVC以及与Struts 2框架的整合功能;在业务逻辑层可以管理事务、记录日志等;在持久层可以整合Hibernae、MyBatis、JdbcTemplate等技术。这就充分体现出Spring是一个全面的解决方案,对于已经有较好的解决方案的领域,Spring绝不做重复的事情。
Spring的优点
Spring作为实现JavaEE的一个全方位应用程序框架,为开发企业级应用提供了一个健壮、高效的解决方案。它不仅可以应用于服务器端开发,也可以用于任何Java应用的开发。Spring框架具备以下几个特点:
- 非入侵式:所谓非入侵式,是指Spring框架的API不会在业务逻辑上出现,也就是说业务逻辑应该是纯净的,不能出现与业务逻辑无关的代码。针对应用而言,这样才能将业务逻辑从当前应用中剥离出来,从而在其他的应用中实现复用;针对框架而言,由于业务逻辑中没有Spring的API,所以业务逻辑也可以从Spring框架中快速地移植到其他框架。
- 容器:Spring提供了容器的功能,容器可以管理对象的声明周期,以及对象与对象之间的依赖关系。可以写一个配置文件(通常是xml文件),在上面定义对象的名字,是否是单例,以及设置与其他对象的依赖关系。那么在容器启动之后,这些对象就被实例化好了,直接用就可以,而且依赖关系也建立好了
- IoC:控制反转,可依赖关系的转移,如果以前都是依赖于实现,那么反转为依赖于抽象,其核心思想就是要面向接口编程。
- 依赖注入:对象与对象之间依赖关系的实现,包括接口注入,构造注入,属性setter方法注入,在Spring中支持后两种注入。
- AOP:面向方面编程,将日志、安全、事务管理等服务(或者功能)理解成一个“方面”,以前这些服务通常是直接是在业务逻辑的代码中,这有两个缺点:首先是业务逻辑不纯净,其次是这些服务剥离出来形成一个"方面",可以实现复用。AOP解决了上述问题,可以把这些服务剥离出来形成一个“方面”,可以实现复用。AOP解决了上述问题,可以把这些服务剥离出来形成一个“方面”,可以实现复用;然后将“方面”动态地插入到业务逻辑中,让业务逻辑能够方便地使用“方面”提供的服务。
其他还有一些特点但不是Spring的核心,例如对JDBC的封装和简化,提供事务管理功能,对O/R mapping工具(Hibernate、MyBatis)的整合,提供MVC解决方案;也可以与其他Web框架(Strusts、JSF)进行整合;还要对JNDI、mail等服务进行封装。
Spring的体系结构
Spring框架(Spring Framework)在不断发展和完善,目前Spring框架由20个功能模块构成,这些模块被分组Core Container、Data Access/Intergration、Web、AOP,Insrumentation、Messaging和Test中,Spring Framework包含的内容如下图所示
组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块中实现。下面对体系结构中的模块作简单介绍,具体如下:
- Core Container,核心容器提供了spring的基本功能,是其他模块建立的基础,它主要由Beans模块、Core模块、Context模块和Spring EL模块组成,介绍如下:
- Beans模块:提供了BeanFactory,是工厂模式实现的经典,Spring将管理对象成为Bean
- core核心模块:提供了Spring框架的基本组成部分,包括IoC和DI功能。
- context:上下文模块:构建于核心模块之上,它是访问定义配置的任何对象的媒介,扩展了BeanFactory的功能,其中ApplicationContext是Context模块的核心接口。
- Spring EL模块:是Spring 3.0后新增的模块,提供了Spring Expression Language支持,是运行时查询和操作对象图的强大的表达式语言。
Data Access/Integration,数据访问/集成层包括JDBC、ORM、OXM、JMS和Transaction模块,介绍如下:
- JDBC模块:提供了一个JDBC的抽象层,大幅度地减少了在开发中对于数据库的操作代码
- ORM模块:提供了一个支持对象/XML映射的抽象层实现,如JAXB、Castor、XMLBeans、JiBX和XSream
- JMS模块。指Java消息传递服务,包含使用和产生消息的特性,自Spring 4.1以后,提供了Spring-messaging模块的集成。
- Transactions模块:支持对实现特殊接口以及所有POJO类的编程和表明式的事务管理。
Web,Web层包括WebSocket、Servlt、Web和Porlet模块,介绍如下:
- Web模块:提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet监听器进行IoC容器初始化以及Web应用上下文
- Servlet模块:也称做Spring-webmvc模块,包含Spring的模型-试图-控制器(MVC)和REST Web Services实现的Web应用程序
- WebSocket模块:Spring 4.0以后新增功能,提供了WebSocket和SockJS实现以及对STOMP的支持
- Portlet模块:类似Servlet模块的功能,提供了Portlet环境下的MVC实现
其他模块。Spring的其他模块还有AOP、Aspects、Instrumentation、Messaging以及Test模块,介绍如下:
- AOP模块:提供了面向方面编程的支持,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性
- Aspects模块:提供了与AspectJ的集成功能,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。
- Instrumentation框架:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
- Messaging模块:Spring 4.0以后新增的模块,提供了对消息传递体系结构和协议的支持。
- Test模块:提供了对单元测试和集成测试的支持