320 likes | 799 Views
Spring 在淘宝业务系统中的应用. 君山(许令波) 淘宝网 - 商品详情团队. 关于我. 花名:君山 真名:许令波 博客: http://xulingbo.net 微博: @ 淘宝君山 邮箱: xulingbo0201@163.com 简介: 2009 年毕业加入淘宝,一直在做淘宝商品详情系统的性能优化方面的工作,开发过一个 Sketch 模板引擎、 Feiba MVC 框架、给 developerworks 投稿获得过最佳作者,著有 《 深入分析 Java Web 技术内幕 》 一书。. 内容提要. 淘宝业务系统特点 基于 Spring 的 MVC 架构
E N D
Spring在淘宝业务系统中的应用 君山(许令波) 淘宝网-商品详情团队
关于我 花名:君山真名:许令波博客:http://xulingbo.net微博:@淘宝君山邮箱:xulingbo0201@163.com简介:2009年毕业加入淘宝,一直在做淘宝商品详情系统的性能优化方面的工作,开发过一个Sketch模板引擎、Feiba MVC框架、给developerworks 投稿获得过最佳作者,著有《深入分析Java Web技术内幕》一书。
内容提要 • 淘宝业务系统特点 • 基于Spring的MVC架构 • 基于SpringExt的Webx框架介绍 • Spring Schema与SpringExt • SpringExt原理 • 用SpringExt扩展Webx框架实例
内容提要 • 淘宝业务系统特点 • 基于Spring的MVC架构 • 基于SpringExt的Webx框架介绍 • Spring Schema与SpringExt • SpringExt原理 • 用SpringExt扩展Webx框架实例
淘宝业务系统特点 • 业务系统繁多 • 上万个业务系统、系统之间关联错综复杂 • 业务场景复杂 • 各种各样的需求都有、业务场景复杂 • 业务变化频繁 • 需求变化快、维护性要方便 • 系统访问量高 • 性能要求高
基于Spring IOC构建整个业务层 业务系统以IOC容器为核心 向上以Velocity模板引擎来驱动 向下以HSF远程调用关联起来 分布式Cache层 持久层
基于IOC的业务层架构 三层划分非常清晰 每个系统都是一个IOC容器 各层的依赖关系完全由Spring的配置文件来管理
Spring在淘宝的使用 使用非常广泛 使用的都是比较普遍和成熟的功能 解决依赖注入为核心目的 特性功能很少使用,主要是考虑复杂度和性能考虑
内容提要 • 淘宝业务系统特点 • 基于Spring的MVC架构 • 基于SpringExt的Webx框架介绍 • Spring Schema与SpringExt • SpringExt原理 • 用SpringExt扩展Webx框架实例
基于Spring的MVC框架 业务系统都是基于Webx框架 Webx是什么?
Webx是什么 • 一个重量级的MVC框架 • Webx的设计理论 • 三层设计
Webx的整体架构 各个功能模块都转化成Bean 支持子容器的概念
Webx是什么 核心是IOC容器
Webx的扩展 自定义Schema 扩展机制--SpringExt
内容提要 • 淘宝业务系统特点 • 基于Spring的MVC架构 • 基于SpringExt的Webx框架介绍 • Spring Schema与SpringExt • SpringExt原理 • 用SpringExt扩展Webx框架实例
Spring最原始的配置 • 只实现了最基本的IOC • 存在的问题 • 没有检验机制 • 无法了解更多约束条件 • 配置依赖于实现
基于Spring Schema • 优点 • 配置简化 • 可验证 • 包含更多约束条 • 依赖XML Schema • 缺点 • 配置无法自由不可扩展
基于SpringExt Schema 重新定义namespaces —— 将ResourceLoader和<resource-loading>所属的namespace分离 将自定义的file-loader和webapp-loader放在loaders名字空间中,不要修改<resource-loading>的schema,而就能扩展
SpringExt是如何做到自由扩展的? 运用了XML Schema中的<xsd:any>定义,相当于说:<resource> element下面,可以跟任意多个<loaders:*> elements 只规定namespace是“http://www.alibaba.com/schema/services/resource-loading/loaders”。
如何实现自定义chema? Configuration Point Contribution 自定义jar包
Configuration Point 对应一个唯一的名称,例如:services/resource-loading/loaders。 对应一个唯一的namespace,例如:http://www.alibaba.com/schema/services/resource-loading/loaders。 对应一个唯一的schema,例如:services-resource-loading-loaders.xsd。
Contribution 唯一的名字,如database-loader 唯一的schema,services/resource-loading/loaders/database-loader.xsd
自定义jar包 定义实现类 定义Schema
自定义扩展实例1—构建jar包 定义实例类的类名
自定义扩展实例1—工程引入jar包 pom文件引入
自定义扩展实例2 Pull中增加一个扩展
自定义扩展实例2 增加Schema 定义类名 引入jar包
自定义扩展总结 在配置文件中自定义一个唯一名称 在要扩展的namespace中定义Schema 指定要实现的类型路径 构建一个jar包引入到工程中 所以使用SpringExt就可以不用修改原Schema的情况下使用自定义扩展