原创作者: chinajavawolf
阅读:1340次
评论:0条
更新时间:2011-05-26
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
Tapestry/Spring 集成
提供Tapestry和Spring的集成,允许通过Spring定义的beans被注入在Tapestry IoC服务内,并且在Tapestry组件内。
版本
这个模块这对Spring1.2.8进行的编译和测试。然而,Spring2.0完全向后兼容Spring1.2.8。
这个模块使用Maven空间“提供”Spring的依赖。这意味着在你的POM内,你将需要指定你自己的依赖给Spring。包括正确的版本。例如:
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>1.2.8</version>
- </dependency>
使用默认的Maven空间,Spring JARs和依赖将被打包到你的应用的WAR文件内。
用法
这个集成被设计为一个非常薄的层,在Spring为web应用的标准配置之上。
详细的用法在可用的Spring 1.2.x文档内。
-
web.xml 改变
简单的形势是你必须做两个小的改变对你应用的web.xml。
首先,一个特定的过滤器被用来替换标准的TapestryFilter。
- <filter>
- <filter-name>app</filter-name>
- <!-- Special filter that adds in a T5 IoC module derived from the Spring WebApplicationContext. -->
- <filter-class>org.apache.tapestry.spring.TapestrySpringFilter</filter-class>
- </filter>
其次,你必须添加标准的Spring配置,其中包括< listener >元素和(可选的)<context-param>确定加载哪个Spring bean配置文件:
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
<context-param>列出Spring bean配置文件。它是可选的并且默认的,如果仅是/WEB-INF/applicationContext.xml 可以省略。
ContextLoaderListener负责读配置文件的bean并且存储他们在application context内,Tapestry-Spring集成代码在那里使用它。
-
注入beans
在你的组件类内,你可以使用Inject标注。典型的,仅是字段域类型充分确定Spring bean 的注入:
- @Inject
- private UserDAO _userDAO;
如果你有多个bean实现同一接口(对于实例,如果你已经包裹你的bean使用你的事务拦截器),你必须消除歧义。最简单的方法是添加一个Service标注来确定Spring bean的名字:
- @Inject
- @Service("UserDAO")
- 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作为必须的。
评论 共 0 条 请登录后发表评论