Tapestry IoC容器从历史上来说,是从HiveMind继承发展而来,但是HiveMind和目前大红大紫的Spring都不能满足Tapestry的一些特定的需求,所以全新开发了一套IoC的容器。
其核心思想就是使用Java代码自身来解决依赖注入而不是由Xml之类的配置文件来完成,这和Guice的思想是非常相似的,Lewis也承认从Guice那里借鉴了不少。
另外需要说明一下的是,Tapesty还从中国的一个非常古老但又充满哲理的游戏--围棋中借鉴了一些术语和思想。大意是围棋中经常要把棋子走的轻盈(Lightness),让每个棋子都能尽量地高效。编程也一样要轻量(Lightness)。
IoC容器中使用的一些概念,充分理解这些概念会对Tapesty IoC容器有一个总体上的感性认识。
Tapestry IoC中的最基本的组成单元是服务(Service)。服务一般由一个接口和一个接口的实现组成。每个服务都有一个全局唯一的标识(ID)。数个或者多个服务组成一个模块。模块中会包括一个模块定义类,在这个类里面有一系列的静态或者成员方法,用于定义服务、装饰服务、或者添加配置项。这个类中的方法定义服务,并同时负责实例化服务的实现类。这些方法被称为:服务创建 (build) 方法。
注册表(Registry) 是外部世界与服务和模块交互的媒介。通过注册表,使用服务的ID或者服务接口,才有可能获得一个服务(服务ID是大小写不敏感的,这是Tapestry的一个随处可见的特性)。
服务可以由服务装饰方法进行装饰(decorate)。这些装饰方法会创建拦截器(interceptor)来包装核心的服务实现,在外面添加诸如日志、权限检查、数据库事务之类的行为。拦截器需要实现同样服务接口,这实际上就是一个装饰模式的应用。
下面是关于服务的一个很重要的概念:
A. 配置(Configuration):
在Tapestry的AppModule.java中最常见的是两类方法,一类是前面刚刚介绍过的服务创建方法,一般是以build开头的。另一大类就是添加配置的方法了,一般是以contribute开头。
服务可以根据配置项灵活配置,配置的数据结构可以是Map、集合或者是有序列表。
服务自己定义允许什么类型的配置项可以被添加到配置中,Tapestry中把添加配置项的动作称之为贡献(Contribute)。
配置可以由一个或者多个模块分别贡献而成。通过调用服务贡献方法(Service Contributor Methods)来把配置对象添加到配置中。
B. 服务的状态演变:
服务只有在需要的时候才会被实例化。在这里,“需要”的意思是服务的某个方法被调用了。开始的时候,从外界来看,服务只是一个实现了服务接口的代理。当这个代理的方法第一次被实际调用的时候,完整的服务(也就是服务的实现类)才会真正地被构造。并且这个构造过程是线程安全的。
实例化服务、进行依赖注入、装饰服务这就是服务实现(Realization)的所有组成部分。通过这三步一个服务才从虚拟状态(只是一个代理)转换成真实状态(完全的实例化,等待被使用了)。
C. 服务的范围:
服务的缺省范围是单例的,另外也可以与当前线程绑定。
依赖项是服务实现类所需要的其他服务。依赖项可以由服务创建方法通过构造函数、方法参数注入进来。
注入点可以是类成员属性、方法参数、或者构造函数参数。通常使用注解来指定注入的类型。
原文地址:http://www.blogjava.net/usherlight/archive/2009/09/12/294895.html
分享到:
相关推荐
综合以上信息,"tapestry-bin-5.1.0.5" 是一个完整的Tapestry框架发行版,包含核心库、ORM支持、依赖注入、文件上传和Spring集成等功能,并且严格遵循开放源代码许可证,确保开发者可以合法地使用、修改和分发这些...
tapestry5.1.0.5中文实例教程,对于目前国内tapestry学习资源紧缺的情况,可谓填补了中文学习最大的空白,对于想学习tapestry5框架的人来说可谓字字如金,内容详尽,由浅入深,pdf格式
来自:http://tapestry.apache.org/tapestry5.1/tapestry-core/ref
包含: tapestry 的源代码, tapestry集成spring2.0 tapestry快速启动 tapestry upload tapestry hibernate tapestry annotations
在官方下载的最新的tapestry5的api文档。。。。。。
Tapestry5最新中文教程.doc 作者 Renat Zubairov & Igor Drobiazko译者 沙晓兰 发布于 2008年7月2日 下午9时30分 社区 Java 主题 Web框架 ----------------------------------------- Tapestry5.1实例教程.pdf ...
Tapestry5.0.16文档和大家一起学习
Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...
《Tapestry5.1实例教程》是一份深入讲解Java Web开发框架Tapestry5.1的实践指导文档。Tapestry5.1是Apache软件基金会的一个开源项目,它为开发者提供了一种高度模块化、组件化的Web应用程序开发方式,强调了代码的...
2. **tapestry-ioc.jar**:Tapestry依赖注入(IoC)容器,用于管理对象的创建、配置和生命周期,使得代码更加松耦合。 3. **tapestry-webresources.jar**:处理静态资源如CSS、JavaScript和图片,支持压缩、合并和...
4. **Tapestry IoC (Inversion of Control)**:`tapestry-ioc-5.3.8.jar`实现了依赖注入容器,使得对象的创建和管理变得更加简单,同时也促进了代码的解耦。开发者可以声明服务并定义它们之间的依赖关系,IoC容器会...
- 访问 [http://tapestry.apache.org/](http://tapestry.apache.org/) 下载 tapestry-bin-5.1.0.5.zip。 - 备份以备后续使用。 ##### 1.5 新建 Web 工程 - **步骤**: - 打开 Eclipse,选择 File > New > ...
在"tapestry-ioc-5.0.3-src"这个压缩包中,我们可能找到Tapestry IOC框架的源代码,这对于开发者深入理解其工作原理和定制功能非常有价值。 1. **依赖注入(DI)**:Tapestry IOC的核心概念就是DI,它允许对象在...
1. **组件化编程:**Tapestry的核心思想之一就是组件化编程,这意味着开发者可以将Web页面分解为多个可复用的组件,每个组件都可以独立开发和维护。 2. **自动表单处理:**Tapestry框架提供了自动表单处理功能,可以...
- **跟踪最新动态**:关注Tapestry5项目的更新日志和技术博客,了解最新的技术和最佳实践。 总之,《Tapestry5:构建Web应用程序》是一本非常适合希望使用Tapestry5框架构建高质量Web应用的开发者的指南。无论是...
在本文中,我们将详细介绍如何使用 Eclipse、Maven 和 Jetty 搭建 Tapestry5 的开发环境。这不仅有助于理解基本的搭建流程,还能帮助开发者掌握必要的配置步骤和技术细节。 #### 一、环境需求 - **Eclipse**: 版本...