Tapestry集成Spring的具体配置步骤
下面是Spring的配置文件,它定义了多个Bean,我们希望Tapestry能够直接引入bbtForum Bean:
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="bbtForum" class="com.baobaotao.service.BbtForum"/> … </beans>
Tapestry的组件类直接通过注解引用Spring容器中的Bean,来看一下UserRegister如何引用bbtForum Bean:
package com.baobaotao.pages; import org.apache.tapestry.annotations.Inject; import org.apache.tapestry.spring.SpringBean; public class UserRegister { @Inject @SpringBean("bbtForum") ①通过注解,Tapestry将在启动时注入Spring容器中的Bean private BbtForum _bbtForum; void onSuccess() { … } }
在编写好通过注解引用Spring容器的Bean的组件类后,剩下的工作就是如何正确配置web.xml以便组件类能够真正注入Spring Bean并正确地工作起来:
代码清单 5 web.xml <web-app> <context-param> ① Tapestry通过该上下文参数确定应用程序类所在的包 <param-name>tapestry.app-package</param-name> <param-value>com.baobaotao </param-value> </context-param> <context-param> ② Spring配置文件 <param-name>contextConfigLocation</param-name> <param-value>classpath:baobaotao-*.xml</param-value> </context-param> <filter> ③ Tapestry过滤器,既负责初始化Tapestry,又负责截获框架处理的URL请求 <filter-name>app</filter-name> <filter-class>org.apache.tapestry.TapestryFilter</filter-class> </filter> <filter-mapping> <filter-name>app</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> ④ 初始化Spring容器 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
TapestryFilter扮演着重要的角色,它一方面负责初始化Tapestry框架,在初始化时就着手将Spring容器中的Bean注入到标注@SpringBean注解的组件类中;另一方面它还负责截获URL请求,以便交由Tapestry框架进行具体的处理。
当然,我们也需要在web.xml中配置好Spring相关的配置启动Spring容器,这样Tapestry才能正确引用到Spring容器中的Bean。
小结
简而言之,要将Tapestry 5和Spring 2.0进行集成,你仅需要进行以下两个小小的步骤就可以了:
1) 将tapestry-spring-5.0.x.jar添加到类路径中;
2) 在组件类需要注入Spring容器Bean的地方使用@SpringBean注解。
集成成功后,在Tapestry 5组件类中需要注入Spring容器中Bean的地方(可以是成员变量或方法入参)直接使用@SpringBean注解进行标注就可以了。