Apache Geronimo和Spring 框架,第4部分 - 编程入门网
第4部分(7)
时间:2011-10-13 IBM Arun Chhatpar
事件的 Around 建议 流程 这是 AOP 中最有趣且使用最为广泛的建议。此建议与其他两种建议之间的主要差别在于在实 现此建议时可以实施更多控制,因为执行流程将停在由 Advice 类实现的 invoke() 方法中。这就是此建 议被称为 主动 建议,而其他建议被称为 被动 建议的原因。 Around 建议专门用于在调用前后实 现自定义行为。它们负责选择是返回自己的返回值继续执行操作,还是抛出异常切换到其他执行路径。 Around 建议在 Spring AOP 中被定义为拦截程序。拦截程序是拦截方法并抛出异常以取得程序执 行控制的类。图 6 展示了如何为应用程序实现 Around 建议。 图 6. Around 建议的事件执行 从图中可以看到,当 Spring 看到一个 Around 建议时,它将在 MethodInterceptor 接口(实现此 AOP 结构的接口)的实现 上调用 invoke() 方法。只需注意必须在 MethodInvocation 对象上显式调用 proceed() 方法,以在目 标对象上执行该方法。 如果对应用程序开发进行更深层次的钻研,以上定义的所有流程将会更有 意义。 插入 Spring AOP 支持的事务管理 应用程序的下一个逻辑步骤是将事务管理引入其 中。 声明性事务管理特性是由 Spring 框架中的 Spring AOP 启用的。虽然此特性使用 AOP,但 它非常明晰以至于用户不需要了解 AOP,并且无需更改任何代码就可以将事务引入到应用程序中。 这里将使用 TransactionProxyFactoryBean 来创建事务性代理以将事务方面引入应用程序。此 Bean 只是 Spring 的一般 ProxyFactoryBean 的一特例。此 Bean 还将自动创建 TransactionInterceptor 并将其与该代理对象连接起来。 然后,将在必须应用此事务方面的方法 上声明性地定义切入点。该定义有三个必须指定的主属性: transactionManager:要使用的 PlatformTransactionManager 实现(例如,DataSourceTransactionManager 实例) target:应 为其创建事务代理的目标对象 transactionAttributes:每个目标方法名称(或方法名称模式)的 事务属性(例如,传播行为和 readOnly 标志) 应用程序将使用 Spring 框架附带的 JDBC DataSourceTransactionManager。target 是服务对象 PhonebookDataProvider 的接口定义。此处将为应 用程序的 add 方法定义事务属性。 事务性代理将实现目标的接口;在本例中,为 PhonebookDataProvider 类。这是为此类定义接口的主要原因。 应用程序的数据模型定义和数据 库设置 在尝试访问数据库前,必须确保数据库已正确设置。这里将使用在第 3 部分中创建的同一 个数据库。因此如果遵循本系列教程的 第 3 部分 中的指导信息进行了操作,则应该已全部设定完毕; 如果没有遵循上述指导信息,则必须返回并完成第 3 部分,然后才能继续本教程。 准备好数据库 中的数据后,可以继续进行应用程序处理。根据先前部分中的建议,需要先定义 Add New Entry 页面。 然后从最简单的方面 —— 方法标记(或方法跟踪)—— 开始,接下来把事务声 明性地添加到应用程序中。稍后您将看到如何使用 SWF 声明性地定义相同的导航流程。 Apache Geronimo和Spring 框架,第4部分(8)时间:2011-10-13 IBM Arun Chhatpar定义 Add New Entry 页面 需要使用此页面将导航流程添加到应用程序中以及显示 Spring 框架的事务管理 特性。此页面的 JSP 非常简单,只有一张表单和几个动作。您可以在 <WORKSPACE>/ phonebook\web\WEB-INF/jsp 目录中查看这段代码。图 7 显示了运行此页面在浏览器中会看到的一个结 果画面。当您在应用程序主页中单击 Add an Entry 按钮时将调用此页面。 图 7. 应用程序的 Add New Entry 页面 此时,所需的应用程 序的视图部分 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |