15.5.1.4. Dependency Injecting Spring Beans into Tapestry pages - Tapestry 4.0+ style
Effecting the dependency injection of Spring-managed beans into Tapestry pages in Tapestry version 4.0+ is so much simpler. All that is needed is a single add-on library, and some (small) amount of (essentially boilerplate) configuration. Simply package and deploy this library with the (any of the) other libraries required by your web application (typially in WEB-INF/lib).
You will then need to create and expose the Spring container using the method detailed previously. You can then inject Spring-managed beans into Tapestry very easily; if we are using Java5, consider the Login page from above: we simply need to annotate the appropriate getter methods in order to dependency inject the Spring-managed userService and authenticationService objects (lots of the class definition has been elided for clarity)...
package com.whatever.web.xportal.pages;
public abstract class Login extends BasePage implements ErrorProperty, PageRenderListener {
@InjectObject("spring:userService")
public abstract UserService getUserService();
@InjectObject("spring:authenticationService")
public abstract AuthenticationService getAuthenticationService();
}
We are almost done... all that remains is the HiveMind configuration that exposes the Spring container stored in the ServletContext as a HiveMind service; for example:
<!---->
<module id="com.javaforge.tapestry.spring" version="0.1.1"></module>
<service-point id="SpringApplicationInitializer" interface="org.apache.tapestry.services.ApplicationInitializer" visibility="private"></service-point>
<invoke-factory></invoke-factory>
<construct class="com.javaforge.tapestry.spring.SpringApplicationInitializer"></construct>
<set-object value="service:hivemind.lib.DefaultSpringBeanFactoryHolder" property="beanFactoryHolder"></set-object>
<!---->
<contribution configuration-id="tapestry.init.ApplicationInitializers"></contribution>
<command id="spring-context" object="service:SpringApplicationInitializer"></command>
If you are using Java5 (and thus have access to annotations), then that really is it.
If you are not using Java5, then one obviously doesn't annotate one's Tapestry page classes with annotations; instead, one simply uses good old fashioned XML to declare the dependency injection; for example, inside the .page or .jwc file for the Login page (or component):
<inject property="userService" object="spring:userService"></inject>
<inject property="authenticationService" object="spring:authenticationService"></inject>
In this example, we've managed to allow service beans defined in a Spring container to be provided to the Tapestry page in a declarative fashion. The page class does not know where the service implementations are coming from, and in fact it is easy to slip in another implementation, for example, during testing. This inversion of control is one of the prime goals and benefits of the Spring Framework, and we have managed to extend it all the way up the J2EE stack in this Tapestry application.
分享到:
相关推荐
SpringBeanFactoryHolder是Tapestry 4中用于与Spring集成的关键接口,它允许你在Tapestry组件中直接访问和使用Spring管理的Bean。通过扩展这个类,我们可以实现将Spring的依赖注入到Tapestry组件中的功能。 2. **...
TSH结合了Tapestry的强大组件模型,Spring的依赖注入和事务管理,以及Hibernate的对象关系映射能力,为开发者提供了一种全方位的解决方案。 **Tapestry框架** Tapestry是一个基于Java的开源Web应用程序框架,它强调...
这个整合源码项目对于学习和理解如何在实际项目中运用Tapestry、Spring和Hibernate的协作机制非常有价值。通过研究这些代码,开发者可以深入理解这三大框架的交互方式,提高自己的技能水平。同时,这也是一个实践性...
2. **服务层集成**: 可以在 Spring 中定义业务服务,然后在 Tapestry 组件中通过依赖注入获取这些服务,从而将业务逻辑与视图层解耦。 3. **AOP 集成**: Spring 的 AOP 功能可以与 Tapestry 的事件模型结合,提供更...
Tapestry是一个基于控件的框架以致于用它开发Web应用类似开发传统的GUI应用。你用Tapestry开发Web应用时你无需关注以操作为中心的(Operation-centric) Servlet API.引用Tapestry网站上的一句话:"Tapestry用对象...
5. **业务逻辑实现**:在Spring中,创建业务服务接口和实现,例如`UserService`,包含增删改查的方法。这些方法将使用Hibernate的Session进行数据库操作。 6. **Tapestry 页面设计**:创建Tapestry页面,如`User ...
然后,建立Spring的bean配置,声明实体管理工厂和事务管理器,并进行依赖注入。 在Tapestry中,创建页面组件来展示数据和处理用户输入。例如,创建一个用于显示所有记录的列表页面,一个用于添加新记录的表单页面,...
Tapestry、Hibernate 和 Spring 是三个在 Java Web 开发中非常关键的开源框架,它们各自在应用程序的不同层面上发挥着重要作用。Tapestry 是一个基于组件的 Web 应用框架,提供了强大的动态页面渲染和丰富的用户体验...
### 基于Tapestry+Spring+Hibernate框架的Web应用 #### 框架概述与整合 在当今的企业级Web应用开发中,选择合适的框架是确保应用性能、可维护性和扩展性的关键。Tapestry、Spring和Hibernate作为三个广受好评的...
"tapestry学习入门资料" Tapestry 是一个开源的基于 servlet 的应用程序框架,它使用组件对象模型来创建动态的、交互的 web 应用。 Tapestry 使得 Java 代码与 HTML 完全分离,利用这个框架开发大型应用变得...
在这个“Tapestry学习文档”中,我们可以深入理解这个框架的核心概念和技术。 1. **组件化编程**: Tapestry的核心是组件,它将UI元素(如按钮、表单、列表等)封装为独立的、可重用的单元。每个组件有自己的状态...
在IT行业中,开发高效、可维护的Web应用程序是至关重要的,而Tapestry、Hibernate和Spring框架的结合使用,能够帮助我们实现这一目标。本文将深入探讨如何在实际项目中运用这三个技术,以及它们如何协同工作,以实现...
Tapestry可以与其他Java库和框架无缝集成,如Spring、Hibernate等,增强了其在大型项目中的适用性。 10. **学习资源**: 虽然Tapestry 4的中文文档较少,但提供的《Tapestry4 用户指南》和《Tapestry4 快速启动》...
通过这些资料的学习,开发者不仅能掌握Tapestry的基础知识,还能深入理解其高级特性,从而在实际项目中更加灵活地运用Tapestry框架,提高开发效率和代码质量。对于想要在Java Web开发领域专精Tapestry的程序员来说,...
Tapestry原本通过getEngine()->getService()的方式来获取服务,但在整合后,这些服务即Spring中的Bean,将由Spring容器来管理和实例化。 整合的关键在于如何让Tapestry页面访问到由Spring管理的服务。一种简单的...
这是Tapestry5.3.8 版本的一个大Demo,集合Spring4.0, 采用Maven 项目管理工具,没有集合Hibernate。 之所以说是个大Demo,是因为这项目中包含的内容并不少,包含: 1)解决了Tapestry5.3.8中文Bug问题 2)Tapestry...
Tapestry 5 的优势还体现在REST风格的URL、可降级的JavaScript、不依赖XML的配置等方面,同时它支持与其他框架(如Hibernate、Spring、Seam、Acegi)的集成,增强了灵活性和可扩展性。Tapestry封装了最佳实践,旨在...
16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 下载Spring A.1.1 研究Spring发布 A.1.2 构建自己的类路径 A.2 把...
- **注入 Spring Bean**:使用 Tapestry 注入 Spring 管理的 Bean。 - **事务边界**:确保在适当的事务上下文中执行操作。 #### VIII. Hibernate 延迟加载配置 - **实体属性**:标记为懒加载以提高性能。 - **集合...