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