spring 在淘宝业务系统中的应用

32
Spring 在在在在在在 在在在在 在在 在在在在 () 在在在 - 在在在在在在

Upload: mara-randolph

Post on 01-Jan-2016

299 views

Category:

Documents


0 download

DESCRIPTION

Spring 在淘宝业务系统中的应用. 君山(许令波) 淘宝网 - 商品详情团队. 关于我. 花名:君山 真名:许令波 博客: http://xulingbo.net 微博: @ 淘宝君山 邮箱: [email protected] 简介: 2009 年毕业加入淘宝,一直在做淘宝商品详情系统的性能优化方面的工作,开发过一个 Sketch 模板引擎、 Feiba MVC 框架、给 developerworks 投稿获得过最佳作者,著有 《 深入分析 Java Web 技术内幕 》 一书。. 内容提要. 淘宝业务系统特点 基于 Spring 的 MVC 架构 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Spring 在淘宝业务系统中的应用

Spring在淘宝业务系统中的应用

君山(许令波)

淘宝网 -商品详情团队

Page 2: Spring 在淘宝业务系统中的应用

花名:君山真名:许令波博客: http://xulingbo.net微博:@淘宝君山邮箱: [email protected]简介: 2009年毕业加入淘宝,一直在做淘宝商品详情系统的性能优化方面的工作,开发过一个 Sketch模板引擎、 Feiba MVC框架、给 developerworks 投稿获得过最佳作者,著有《深入分析 Java Web技术内幕》一书。

2

关于我

Page 3: Spring 在淘宝业务系统中的应用

• 淘宝业务系统特点• 基于 Spring 的 MVC架构• 基于 SpringExt 的 Webx框架介绍

– Spring Schema 与 SpringExt

– SpringExt原理– 用 SpringExt扩展Webx框架实例

内容提要

3

Page 4: Spring 在淘宝业务系统中的应用

• 淘宝业务系统特点• 基于 Spring 的 MVC架构• 基于 SpringExt 的 Webx框架介绍

– Spring Schema 与 SpringExt

– SpringExt原理– 用 SpringExt扩展Webx框架实例

内容提要

4

Page 5: Spring 在淘宝业务系统中的应用

• 业务系统繁多– 上万个业务系统、系统之间关联错综复杂

• 业务场景复杂– 各种各样的需求都有、业务场景复杂

• 业务变化频繁– 需求变化快、维护性要方便

• 系统访问量高– 性能要求高

淘宝业务系统特点

5

Page 6: Spring 在淘宝业务系统中的应用

• 业务系统以 IOC容器为核心• 向上以 Velocity模板引擎来驱动• 向下以 HSF远程调用关联起来• 分布式 Cache层• 持久层

基于 Spring IOC构建整个业务层

6

Page 7: Spring 在淘宝业务系统中的应用

• 三层划分非常清晰• 每个系统都是一个

IOC容器• 各层的依赖关系完全由 Spring的配置文件来管理

基于 IOC的业务层架构

7

Page 8: Spring 在淘宝业务系统中的应用

• 使用非常广泛• 使用的都是比较普遍和成熟的功能• 解决依赖注入为核心目的• 特性功能很少使用,主要是考虑复杂度和性能考虑

Spring在淘宝的使用

8

Page 9: Spring 在淘宝业务系统中的应用

• 淘宝业务系统特点• 基于 Spring 的 MVC架构• 基于 SpringExt 的 Webx框架介绍

– Spring Schema 与 SpringExt

– SpringExt原理– 用 SpringExt扩展Webx框架实例

内容提要

9

Page 10: Spring 在淘宝业务系统中的应用

• 业务系统都是基于Webx框架• Webx是什么?

基于 Spring 的 MVC框架

10

Page 11: Spring 在淘宝业务系统中的应用

• 一个重量级的MVC框架• Webx的设计理论

– 三层设计

Webx是什么

11

Page 12: Spring 在淘宝业务系统中的应用

• 各个功能模块都转化成 Bean

• 支持子容器的概念

Webx的整体架构

12

Page 13: Spring 在淘宝业务系统中的应用

• 核心是 IOC容器

Webx是什么

13

Page 14: Spring 在淘宝业务系统中的应用

• 自定义Schema

• 扩展机制 --SpringExt

Webx的扩展

14

Page 15: Spring 在淘宝业务系统中的应用

• 淘宝业务系统特点• 基于 Spring 的 MVC架构• 基于 SpringExt 的 Webx框架介绍

– Spring Schema 与 SpringExt

– SpringExt原理– 用 SpringExt扩展Webx框架实例

内容提要

15

Page 16: Spring 在淘宝业务系统中的应用

Spring最原始的配置

16

• 只实现了最基本的 IOC• 存在的问题

– 没有检验机制– 无法了解更多约束条件– 配置依赖于实现

Page 17: Spring 在淘宝业务系统中的应用

基于 Spring Schema

17

• 优点– 配置简化– 可验证– 包含更多约束条– 依赖 XML Schema

• 缺点– 配置无法自由不可扩展

Page 18: Spring 在淘宝业务系统中的应用

基于 SpringExt Schema

18

• 重新定义 namespaces —— 将 ResourceLoader 和 <resource-loading>所属的namespace分离

• 将自定义的 file-loader 和 webapp-loader放在 loaders名字空间中,不要修改<resource-loading> 的 schema,而就能扩展

Page 19: Spring 在淘宝业务系统中的应用

SpringExt是如何做到自由扩展的?

19

• 运用了 XML Schema中的 <xsd:any>定义,相当于说: <resource> element下面,可以跟任意多个 <loaders:*> elements

• 只规定 namespace是“ http://www.alibaba.com/schema/services/resource-loading/loaders”。

Page 20: Spring 在淘宝业务系统中的应用

database-loader如何注入到 resource-loading中?

20

Page 21: Spring 在淘宝业务系统中的应用

如何实现自定义 chema?

21

• Configuration Point• Contribution• 自定义 jar包

Page 22: Spring 在淘宝业务系统中的应用

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 在淘宝业务系统中的应用

Contribution

23

• 唯一的名字,如 database-loader• 唯一的 schema , services/resource-loading/loaders/database-loader.xsd

Page 24: Spring 在淘宝业务系统中的应用

自定义 jar包

24

• 定义实现类• 定义 Schema

Page 25: Spring 在淘宝业务系统中的应用

自定义扩展实例 1—唯一名称

25

Page 26: Spring 在淘宝业务系统中的应用

自定义扩展实例 1—定义 Schema

26

Page 27: Spring 在淘宝业务系统中的应用

自定义扩展实例 1—构建 jar包

27

• 定义实例类的类名

Page 28: Spring 在淘宝业务系统中的应用

自定义扩展实例 1—工程引入 jar包

28

• pom文件引入

Page 29: Spring 在淘宝业务系统中的应用

自定义扩展实例 2

29

• Pull中增加一个扩展

Page 30: Spring 在淘宝业务系统中的应用

自定义扩展实例 2

30

• 增加 Schema• 定义类名• 引入 jar包

Page 31: Spring 在淘宝业务系统中的应用

自定义扩展总结

31

• 在配置文件中自定义一个唯一名称• 在要扩展的 namespace中定义 Schema• 指定要实现的类型路径• 构建一个 jar包引入到工程中• 所以使用 SpringExt就可以不用修改原 Schema的情况下使用自定义扩展

Page 32: Spring 在淘宝业务系统中的应用

Thank You!