您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Spring参考手册
第一部分Spring框架的概述Spring框架是一个轻量级的解决方案和为构建企业级应用程序潜在的一站式服务。然而,Spring是模块化的,允许你只使用那些你需要的部分,而忽略其他部分。你可以在使用Struts时用Spring的IoC容器,但你也可以只使用Hibernate集成代码或JDBC抽象层。Spring框架支持声明式事务管理、通过RMI或web服务远程访问你的逻辑,还有多种方式处理数据的持久化。它还提供一个全能的MVC框架,并且能将AOP移植进你的软件。Spring被设计为非侵入式的,意味着你的逻辑代码完全不必依赖于此框架。虽然一些基于数据访问技术和Spring的库会存在于你的集成层(例如数据访问层),但是你的其他代码很容易隔离这些依赖。1.开始使用Spring这篇手册提供了关于spring框架的详细信息,不仅有全面的特性,还有一些关于spring包含的潜在的概念(例如“依赖注入”)的背景知识。如果你才刚刚开始,也许你应该从低级版的GettingStarted手册开始,从访问。为了更容易消化,这篇手册是专注于任务式。2.Spring框架的介绍Spring框架是一个支持开发Java应用程序而提供全面的基础设施的Java平台,Spring处理基础部分从而你可以专注于你的应用。spring让你能够通过POJOs和向POJOs应用无侵入的企业服务就可以构建你的应用。这些不仅能应用到JavaSE而且还能应用到JavaEE.一些作为一个开发者能够使用spring平台优势的例子使Java方法可以执行数据库事务而不用去处理事务API使本地Java方法可以执行远程过程而不用去处理远程API使本地Java方法可以拥有管理操作而不用去处理JMXAPI使本地Java方法可以执行消息处理而不用去处理JMSAPI2.1依赖注入和控制反转Java应用程序——一个宽松的专业术语,小到一个Appletes大到运行在n层服务器上的企业级程序—通常由互相协作的对象而形成的适当的应用程序。因此在应用中的各种对象之间都会有依赖关系。虽然Java平台提供了丰富的应用程序开发功能,但是他缺乏将基本模块组织成一个连贯的整体的技术手段,而是把这些任务留待给开发人员解决。当然,你可以使用各种设计模式,包括工厂模式,抽象工厂模式,构建模式,装饰器模式,还有服务定位器去组织这些多样的类和对象实例从而构成一个应用程序。然而,这些模式是如此的简单:一个使用特定名称的最佳实践,描述了它是干什么的,在哪里使用它,解决的问题是什么等等。模式是形式化的最佳实践,你必须在应用程序中实现自己的业务逻辑。Spring框架的控制反转(IoC)组件提供一个成文的解决方案—将不同部分整合成一个完全能协作运行的应用程序—解决了这个问题。spring框架将那些形式化设计模式总结为一流的对象,你可以在你的应用程序中直接使用他们。众多组织和机构使用Spring框架以这种方式来工程师健壮的、可维护的应用程序。2.2模块Spring框架的功能组织成大约20个模块,这些模块分为核心容器、数据访问/集成、网络、AOP(面向切面的编程)、工具、和测试,如下图所示。2.2.1核心容器核心容器包括:Core,Beans,Context,和表达式语言Core和Beans模块是框架的基础部分,拥有IoC和依赖注入的特性。BeanFactory是一个复杂的工厂模式的实现,它消除了对于程序化的单例对象的需求,并且允许你将配置信息和规范的依赖关系从你的实际代码逻辑中解耦出来。Context模块是以Core和Beans模块为基础构建的,提供一种框架式的对象访问方式,就行JNDI注册一样。Context模块从Beans模块继承了它的特性,并增加了对于国际化的支持(用于例如资源包的场景),事件传播,资源配置还有透明的上下文,例如一个Servlet容器。Context模块同样支持JavaEE特性,例如EJB,JMX还有基本的远程操作。ApplicationContext接口是Context模块的核心。表达式语言模块是一种在运行时操作和查询对象的强有力的表达式语言,其语法类似统一的EL语言,但是SpEL提供了额外的功能。2.2.2数据防问/集成数据访问/集成层包括:JDBC、ORM、OXM、JMS和事务等模块JDBC模块提供了一个去除了单调乏味的JDBC代码和解析数据库供应商特定的错误代码的JDBC抽象层。ORM模块将热门的对象关系映射API集成,包含JPA,JDO和Hibernate。使用ORM包你可以将spring提供的其他特性与所有的ORM框架结合,例如前面提到的简单的声明式事务管理。OXM模块提供了一个支持对象到XML映射的抽象层,包括JAXB、Castor、XMLbeans和Xstream。JMS模块支持生产和消费的信息的特性。事务模块支持针对那些实现了特定接口和所有的POJOs类的编程式和声明式的事务管理模式2.2.3Web网络层包括Web、Web-Servlet、Websocket和Web-Portlet模块Spring的Web模块提供基本的以网络为中心的集成特性,例如文件上传,通过使用Servlet监听器初始化IoC,面向web应用程序上下文。它还包含Spring的远程支持的web部件。Web-Servlet包含为web应用程序的spring的MVC实现,springMVC框架将web表单和模型对象完全分离,并集成了spring框架的其他特性。Web-Portet模块用于portlet环境和Web-Servlet模块的功能镜像的MVC实现。2.2.4AOP和工具Spring的AOP模块提供了AOPAlliance-compliant(AOP兼容联盟)的一个面向切面编程的实现,并允许你自己定义,比如,方法拦截器和完全隔离代码的切入点(用于那些需要分离出来的功能实现),使用源码级别的元数据功能,你也可以在你的代码中加入行为信息,类似于.Net属性设置。单独的Aspects模块提供了与AspectJ的集成。工具模块提供了类工具的支持和应用于某些具体的应用程序服务器的类加载器实现。2.2.5测试测试模块支持使用Junit或这TestNG来测试Spring组件。能够持续加载Spring应用上下文,并对其进行缓存,同时也支持使用模拟对象的方式进行隔离测试你的代码。2.3使用场景前面所提到的构建模块说明在很多场景下Spring都是一个合理的选择,从以applets为例的小应用程序到成熟的企业级应用程序都可以使用Spring的事务管理功能和Web框架的集成。Spring的声明式事务管理特性使web应用程序完全事务化,就像使用EJB容器管理的事务。你的所有业务逻辑都可以通过简单POJOs实现并且托管于Spring的IoC容器。其他的服务包括发送邮件和独立于网络层的验证规则,由此你可以选择验证规则作用于哪里。Spring的ORM支持JPA、Hibernate和JDO的集成;例如当使用Hibernate使,你可以继续使用你存在的映射文件和标准的Hibernate的SessionFactory配置。表单控制器将web层与领域模型层无缝集成,并且去除了ActionForms或者那些用于将HTTP参数转换为领域模型的值对象(VO)的类。在某些情况下不允许你完全地迁移到另一个框架。Spring框架并没用强迫你将其所用东西运用到你的项目中,它不是一个孤注一掷的解决方案。现有的基于Struts、Tapestry、JSF或者其他的UI框架的前端,可以集成一个基于Spring的中间件,它允许你使用Spring事务功能。你只需要使用ApplicationContext和WebApplicationContext组织你的业务逻辑从而集成到你的Web层。当你需要通过web服务访问现有的代码,你可以使用Spring的Hessian-,Burlap-,Rmi-或者JaxRpcProxyFactory类。远程服务的访问将不再是困难。Spring框架也为企业级JavaBeans提供了一个访问和抽象层,使你能够重用已有的POJOs,并且将他们包装在无状态的会话Beans中用于可伸缩的自动防故障的web应用程序,一般这些程序可能需要声明式的安全保障。2.3.1依赖管理和命名约定依赖管理和依赖注入是不同的。为了获取Spring的优良特性(例如依赖注入),你需要收集所有需要的库(Jar文件),并且在编译、运行的时候将它们放到你的类路径中。这些依赖不是被注入的虚拟组件,而是文件系统中的物理资源(通常情况下是这样的)。依赖管理的过程包括定位那些资源,存储它们并将他们加入类路径。依赖的有直接(如我的程序在运行期依赖于Spring)和间接(如我的程序依赖于commons-dbcp,而commons-dbcp有依赖于commons-pool)这两种形式。间接的依赖也被称为“传递”,它是最难识别和管理的依赖。如果你将要使用Spring,你需要复制那些包含你需要的Spring功能的jar包。为了使这个过程简单,Spring被打包成一组模块,这些模块尽可能的分开依赖关系。例如,如果不想写一个web应用程序,你就不需要引入spring-web模块。为了在本指南中标记Spring库模块我们使用了速记命名约定spring-*或者spring-*.jar,其中*代表模块的短名(比如spring-core,spring-webmvc,spring-jms等)。实际的jar包名,通常是用模块名字和版本号级联(如spring-core-4.1.4.BULD-SNAPSHOT.jar)。每一个发行版本将会被放到下面的位置:MavenCentral(Maven中央仓库),这是Maven查询的默认库,不需要任何特殊的配置就能使用。许多常用的Spring的依赖库也存在于MavenCentral,并且Spring社区的很大一部分都是用Maven进行依赖管理,所以这是最方便的,他们的jar命名格式是spring-*-vesrsion.jar,groupId是org.springframework。公共Maven仓库还拥有Spring专有的库。除了最终的GA版本,还保存开发的快照版和里程碑版。JAR文件的名字很MavenCentral相同的形式,所以这是让Spring的开发版本使用其他部署在MavenCentral库的一个有用的地方。该库还包含一个用于发布的zip文件,包含所有的Springjar包方便下载。因此你的首要事是决定如何管理你的依赖:我们一般建议使用一个自动系统,就像Maven,Gradle或者Ivy,当然你也可以通过下载自行管理。我们将在这一章节的后面部分进行详细的指导。Spring依赖和依赖于Spring尽管Spring对于非常广泛的企业级业务和其他额外的工具提供了集成和支持,但是它力图将它的强制性依赖降到最低:你不必定位和下载(或者自动化获取)很大数量的jar库而仅仅只是为了在简单的场景中使用Spirng。对于基本的依赖注入只需要一个外部的强制性依赖,并且只是用于日志(见下面关于日志的描述)。接下来我们将一步一步介绍如何配置依赖Spirng的程序。首先是通过Maven,之后是Gradle,最后是Ivy。其中如果有任何不清楚的,可以参考你的依赖关系管理系统的相关文档,或者查看一些示例代码-Spring本身是使用Gradle来管理依赖的。并且我们的示例大多数也是使用Gradle或Maven。Maven依赖管理如果你使用Maven的依赖管理,你甚至不需要明确提供日志依赖。例如,要创建一个应用程序的上下文和使用依赖注入来配置应用程序,你的Maven依赖将看起来像这样:如上图所示,注意scope节点可以被设置为runtime如果你不需要编译SpringAPIs,这通常是基本的依赖注入的案例。以上是使用Maven中央仓库的使用示例。为了使用SpringMaven仓库(例如里程碑版或开发者快照版),你需要在你的Maven配置指定仓库位置。用于发布版:用于里
本文标题:Spring参考手册
链接地址:https://www.777doc.com/doc-2850322 .html