论坛首页 Java企业应用论坛

(D1)Tapestry-Spring Integration

浏览 4459 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-28  
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf  
Tapestry/Spring 集成
 
提供TapestrySpring的集成,允许通过Spring定义的beans被注入在Tapestry IoC服务内,并且在Tapestry组件内。
 
版本
 
这个模块这对Spring1.2.8进行的编译和测试。然而,Spring2.0完全向后兼容Spring1.2.8。
 
这个模块使用Maven空间“提供”Spring的依赖。这意味着在你的POM内,你将需要指定你自己的依赖给Spring。包括正确的版本。例如:
 
  1. <dependency>  
  2.  <groupId>org.springframework</groupId>  
  3.  <artifactId>spring-web</artifactId>  
  4.  <version>1.2.8</version>  
  5. </dependency>  
  6.    
使用默认的Maven空间,Spring JARs和依赖将被打包到你的应用的WAR文件内。
 
用法
 
这个集成被设计为一个非常薄的层,在Spring为web应用的标准配置之上。
 
详细的用法在可用的Spring 1.2.x文档内。
 
  •  web.xml 改变
 
简单的形势是你必须做两个小的改变对你应用的web.xml。
 
首先,一个特定的过滤器被用来替换标准的TapestryFilter。
  1. <filter>  
  2.    <filter-name>app</filter-name>  
  3.    <!-- Special filter that adds in a T5 IoC module derived from the Spring WebApplicationContext. -->  
  4.    <filter-class>org.apache.tapestry.spring.TapestrySpringFilter</filter-class>  
  5. </filter>  
 
其次,你必须添加标准的Spring配置,其中包括< listener >元素和(可选的)<context-param>确定加载哪个Spring bean配置文件:
 
  1. <context-param>  
  2.  <param-name>contextConfigLocation</param-name>  
  3.  <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value>  
  4. </context-param>  
  5.     
  6. <listener>  
  7.  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  8. </listener>  
 
<context-param>列出Spring bean配置文件。它是可选的并且默认的,如果仅是/WEB-INF/applicationContext.xml 可以省略。
 
ContextLoaderListener负责读配置文件的bean并且存储他们在application context内,Tapestry-Spring集成代码在那里使用它。
 
  • 注入beans
在你的组件类内,你可以使用Inject标注。典型的,仅是字段域类型充分确定Spring bean 的注入:
  1. @Inject  
  2. private UserDAO _userDAO;  
 
如果你有多个bean实现同一接口(对于实例,如果你已经包裹你的bean使用你的事务拦截器),你必须消除歧义。最简单的方法是添加一个Service标注来确定Spring bean的名字:
  1. @Inject  
  2. @Service("UserDAO")   
  3. private UserDAO _userDAO;  
 
通过构建器方法或自动构建注入Spring bean是一样的:Spring beans完全就像Tapestry IoC的服务一样。
 
语法灵敏性
 
Spring bean 名字被完全加工成Tapestry IoC服务的ids。因为服务ids忽略大小写,通过bean名字访问Spring bean 也将忽略大小写。
 
WebApplicationContext 服务
 
Spring WebApplicationContext 也被作为一个服务添加,除了定义在context内的服务外。
 
局限性
 
Bean的名字在应用启动时被获得。如果新的beans是在运行时加入Spring application context内的,这对于注入是不可见的。
 
只有bean的名字是可用的,不是任何bean的别名。
 
当有两个只是名字大小写不同的bean时,不检查名字冲突将发生。如果你继续提供名称为
"userDAO" 和"UserDao"的bean ,你只会自找麻烦。
 
非单例beans没有完全控制。Tapestry将从application context请求bean在某种意义上这不相称他们的生命周期。目前,你应该考虑非单例bean为非可注入的。代替的,注入WebApplicationContext服务然后获得非单例beans作为必须的。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics