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