Spring框架简介---使用场景

在许多场景中,使用前面介绍的Spring模块是合乎逻辑的,从运行在有资源限制的嵌入式设备上的应用,到使用Spring事务管理和Web框架集成的完整的企业级应用。
下图是典型的完整的Spring Web应用
这里写图片描述
有些时候不允许你完全切换到不同的框架中,因此Spring框架不会强制要求使用它内部的每个模块,它不是非此即彼的解决方案。既存的用Struts、Tapestry、JSF或其他UI框架构建的前端,可以跟基于允许使用Spring事务功能的Spring的中间层来集成。你只需使用ApplicationContext来联通商务逻辑,并且使用WebApplicationContext来集成你的web层。
下图是远程访问的使用场景
这里写图片描述
当需要通过web service访问既存的代码时,可以使用Spring的Hessian-、Burlap-、Rmi-、或JaxRpcProxyFactory类来访问既存的应用程序。
下图是EJB的使用场景—封装既存的POJO
这里写图片描述
Spring框架还给企业级JavaBeans提供了一个访问抽象层,这样就可以复用既存的POJO,并且为了提高可扩展性、能够在需要声明安全的非安全web应用程中使用,还可以把它们封装到无状态会话Bean中。

依赖管理和命名规范
依赖管理和依赖注入是不同事情。要在应用程序中使用这些优秀的功能(如依赖注入),你需要收集所有的必要的类库(jar文件),并尽可能的在编译时把它们放到你的运行时类路径中。这些依赖不是注入的虚拟组件,而是文件系统中的物理资源。依赖管理的过程涉及资源定位、存储并把它们添加到类路径中。依赖可以是直接的(例如应用在运行时对Spring的依赖),也可以是间接的(例如应用程序依赖commons-dbcp所依赖的commons-pool)。间接依赖也被叫做传递依赖,并且这样的依赖是最难识别和管理的。
如果要使用Spring就需要拷贝一份必要的Spring组件类库。Spring尽可能的把一组模块打包到一个独立的依赖中,以便你能够更加方便的获取拷贝。例如,如果你不想编写Web应用程序,你就不需要spring-web模块。要查找本指南中的Spring类库模块,我们可以使用快捷命名协议spring-或spring-.jar,“*”号代表模块的小名(如spring-core、spring-webmvc、spring-jms等)。通常实际的jar文件名跟版本号连接在一起(入spring-core4.2.0.BUILD-SNAPSHOT.jar)
Spring框架的每个释放版本都会发布到下列地方:
 Maven中心:它是默认额Maven资源库,在使用时不需要特定配置。许多Spring常用的依赖库在这里也是有效的,并且有很多大的Spring社区也使用Maven来管理依赖,因此对于开发者来说是很方便的,在这里jar文件的命名格式是spring-*-.jar,其Maven的groupId是org.springframework。
 专用于托管Spring的公共的Maven资源库:除了最终的GA释放版本之外,这个资源库还管理着开发快照和里程碑。这里的jar文件命名与Maven中心一致,因此这是一个获取跟部署在Maven中心中其他类库一起使用的Spring的开发版本的好地方 ,为了方便下载,这个资源库还包含了一个捆绑发布的zip文件,它把所有的jar文件 捆绑在一起。
因此首先需要决定如何管理依赖,通常推荐使用像Maven、Gradle或lvy等自动系统,但你也可以手动下载必要的jar包。
下表列出了Spring的组件,每个模块的更多的介绍请参照2.2节“模块”。
Spring的框架组件如下
1 org.springframework spring-aop 基于代理的AOP支持
2 org.springframework spring-aspects 基于AspectJ的切面
3 org.springframework spring-beans Bean支持,包括Groovy
4 org.springframework spring-context 应用程序的运行时环境,包括调度和远程处理的抽象
5 org.springframework spring-context-support 用于把常用的第三方 类库集成到Spring的应用环境中的支持类。
6 org.springframework spring-core 被大多数其他Spring模块使用的核心工具类。
7 org.springframework spring-expression Spring的表达式语言(SpEL)
8 org.springframework spring-instrument 用于JVM启动引导的监测代理
9 org.springframework spring-instrument-tomcat 用于Tomcat的监测代理
10 org.springframework spring-jdbc JDBC支持包,包括DataSource安装和JDBC访问支持。
11 org.springframework spring-jms JMS支持包,包括发送和接收JMS消息的辅助器
12 org.springframework spring-messaging 支持消息传递的架构和协议
13 org.springframework spring-orm 对象/关系映射,包括对JPA和Hibernate的支持。
14 org.springframework spring-oxm 对象/XML的映射
15 org.springframework spring-test 支持单元测试和集成测试的Spring组件。
16 org.springframework spring-tx 事务的基础架构,包括对DAO支持和JCA集成
17 org.springframework spring-web Web支持包,包括客户端和web的远程访问。
18 org.springframework spring-webmvc REST的web服务和用于web应用程序的mvc实现
19 org.springframework spring-webmvc-portlet 用于Portlet环境的MVC实现
20 org.springframework spring-websocket WebSocket和SockJS的实现,包括对STOMP支持

Spring依赖和对Spring的依赖
经管Spring提供了集成能力,并且支持大范围的企业级应用和其他的外部工具,但是它还是尽量的保持着对外部工具和应用的最小强制性依赖。在简单的使用Spring的场景中,你不必查找和下载(即使是自动的情况)大量的jar类库。对于基本的依赖注入只有一个对于日志的强制性外部依赖(更多的信息请看后面有关日志选择的介绍)。
接下来我们来介绍一下使用Spring来配置一个应用程序所需的基本步骤,首先介绍Maven,然后是Gradle,最后是lvy。在所有的情况中,如果有任何事情不清楚,可以参看你的依赖管理系统的文档,或者查看一些示例代码—Spring自己在构建的时候使用Gradle来管理依赖,并且我们的大多数示例都使用Gradle或Maven。
Maven的依赖管理
如果使用Maven来年进行依赖的管理,你甚至不需要显示的提供对日志的依赖。例如,在创建一个应用程序环境并使用依赖注入来配置该应用时,Maven的依赖管理如下:


org.springframework
spring-context
4.2.0.BUILD-SNAPSHOT
runtime


注意,如果编译时不依赖Spring的API,元素就可以声明为runtime,这通常用于基本的依赖注入情况。
上面的示例要跟Maven中心资源库协同工作,如果要使用Spring的Maven资源库(如历程碑或开发者快照),就需要在Maven的配置中指定资源库的位置。例如使用完整版本的配置如下:


io.spring.repo.maven.release
http://repo.spring.io/release/
false


使用里程碑版本的配置如下:


io.spring.repo.maven.milestone
http://repo.spring.io/milestone/
false


使用快照版本的配置如下:


io.spring.repo.maven.snapshot
http://repo.spring.io/snapshot/
true

Maven的“资料清单”依赖
在使用Maven时,Spring的JAR版本可能偶尔会有些细微带的差异。例如,你可能会发现某个第三方类库或另外的Spring工程把一个传递式依赖拉入到了一个较旧的释放版本中。如果你忘记了显示的直接声明自己的依赖,就会发生一些意想不到的情况。
要克服这个问题,Maven提供了“资料清单”(BOM)依赖的概念。你可以在dependencyManagement段导入spring-framework-bom来确保所有的spring依赖(直接的和传递式)都是相同的版本。



org.springframework
spring-framework-bom
4.2.0.BUILD-SNAPSHOT
pom
import


使用BOM的一个好处是在依赖Spring框架部件的时候,不再需要指定属性。如:


org.springframework
spring-context


org.springframework
spring-web

Gradle的依赖管理
要跟Gradle构建系统一起来使用Spring的资源库,就要在repositories段包含正确的URL,如:
repositories {
mavenCentral()
// and optionally…
maven { url “http://repo.spring.io/release” }
}
你可以根据需要把上面repositories的URL从/release修改成/milestone或/snapshot。配置完资源库以后,就可以使用如下Gradle常用的方式来声明依赖了:
dependencies {
compile(“org.springframework:spring-context:4.2.0.BUILD-SNAPSHOT”)
testCompile(“org.springframework:spring-test:4.2.0.BUILD-SNAPSHOT”)
}

lvy依赖管理
如果你喜欢使用lvy来管理依赖,那么有相似的配置选项。
要配置lvy就要像下面示例那样把Spring资源库的位置添加到ivysettings.xml文件的解析器中:

展开阅读全文

没有更多推荐了,返回首页