生命周期

Visit对象与Global对象是Tapestry框架的对象容器,我们可以在Visit对象和Global对象中存放任意信息。Visit对象和Global对象的区别在于他们的生命周期不同。

Visit对象
Visit对象是一个Tapestry应用程序的对象容器,用来存储应用程序逻辑和数据。这个对象能被应用程序中所有的页面和组件共享,并且包含Web应 用程序中某一个客户端的特殊信息。该对象类似于HttpSession在典型Servlet应用程序中扮演的角色。实际上,Visit对象最终作为一个 HttpSession的属性被存储。
为了在应用程序中使用一些与Session相关的数据,Tapestry提供了Visit对象。Tapestry并不知道也不关心Visit对象的类型。 Tapestry框架对Visit对象的类型定义没有任何要求,每一个应用程序都可以定义自己的Visit类。不论是通过Tapestry属性注入而获得 的HiveMind框架提供的Visit对象,还是通过AbstractPage类的public Object getVisit()方法获取的Visit对象,Tapestry都没有指定其具体类型。因此,我们需要对获取到的Visit对象进行强制类型转换。例 如:

代码
  1. MyVisit vist =(MyVisit)getVisit();  

Visit对象是Tapestry框架自动创建的,在Tapestry框架启动时通过读取应用程序规范文件,将Visit对象的配置信息存入Tapestry框架的引擎对象中。因此,我们可以随意在应用程序规范文件中定义自己的Visit对象类。
代码
  1. <meta key=”org.apache.tapestry.visit-class” value=”com.tapestry4.engine.MyVisit”/>  

当客户端发出请求,HttpSession对象被创建时,Tapestry读取应用程序中Visit对象的配置信息,并创建Visit对象实例,然后将其存储在HttpSession中,知道HttpSession对象的生命周期结束。
如果有必要,我们可以通过HiveMind框架来创建Visit对象,只需要在应用程序的HiveMind配置文件hivemodule.xml中以下面的方式进行配置。
代码
  1. <contribution configuration-id=”tapestry.state.ApplicationObjects”>  
  2.     <state-object name=”flowStore” scope=”session”>  
  3.         <create-instance class=”com.tapestry.engine.FlowStore”/>  
  4.     </state-object>  
  5. </contribution>  
配置Hivemind提供的id为tapestry.state.ApplicationObjects的configuration。
创建一个Hivemind框架的state状态对象,名称为flowStore,声明周期为session。该状态对象是com.tapestry.engine.FlowStore类的实例。
当我们在页面中需要获取这个名称为flowStore的Visit对象时,可以通过Tapestry属性注入的方式。
代码
  1. <inject property=”myVisitobj” type=”state” object=”flowstore”/>  

<inject> 元素的Type属性标明这里注入的是state状态对象,Object属性标明注入进来的是名称为flowStore的Visit对象。

Global对象

Global对象是一个应用程序空间,用来存储全局性的应用程序逻辑和数据。Global对象的作用如同Visit对象,不过它的生命周期是应用程 序的整个周期。Global对象被所有的应用程序引擎对象和Session会话所共享。实际上,Global对象最终最为一个 ServletContext的属性被储存。如果我们不指定Global对象,那么Tapestry将使用一个线程保护的HashMap来替代它。
Tapestry并不知道也不关心Global对象的类型。Tapestry框架对Global对象的类定义没有任何要求,每一个应用程序都可以定义自己 的Visit类。不论是我们通过Tapestry属性注入而获得的HiveMind框架提供的Global对象,还是通过AbstractPage类的 public Object getGlobal()方法获取的Global对象,Tapestry都没有指定具体类型。因此,我们需要对获取到的Global对象进行强制类型转换。 例如:
MyGlobal global =(MyGlobal)getGlobal();
我们可以在应用程序规范文件中随意定义自己的Global对象类。

代码
  1. <meta key=”org.apache.tapestry.global-class” value=”com.tapestry4.engine.MyGlobal”/>  
当应用程序被启动,ServletContext对象被创建时,Tapestry读取应用程序规范中Global对象的配置信息,并创建Global对象实例,然后将其储存在ServletContext对象中,直到应用程序被关闭。
如果有必要,我们可以通过Hivemind框架来创建Global对象,只需要在应用程序的Hivemind配置文件hivemodule.xml中以下面的方式进行配置。
代码
  1. <contribution configuration-id=”tapestry.state.applicationObject”>  
  2.     <state-object name=”flowstore” scope=”application”>  
  3.         <create-instance class=”com.tapestry.engine.FlowStore”/>  
  4. </state-object>  
  5. </contribution>  
创建一个Hivemind框架的state状态对象,名称为flowStore,生命周期为application。该状态对象是com,tapestry.engine,FlowStore类的实例。
当我们需要在页面中获取这个名称为flowStore的Global对象时,可以通过Tapestry属性注入的方式。
代码
  1. <inject property=”myVisitObj” type=”state” object=”flowStore”/>  
实际上,就<inject>元素的使用方式而言,向Tapestry属性中注入Visit对象和注入Global对象并没有任何差别。而关键在于这个被注入的对象实例本身的生命周期是session还是application。
请一定要注意,不论是Visit对象还是Global对象,它们并非是指某一个特定的对象类,而是代指两种不同生命周期的对象。只要进行了配置,任何Java类都可以成为Visit对象或Global对象。
Maven 的生命周期详解 在 Maven 出现之前,项目构建的生命周期已经存在,开发人员每天都在进行项目的清理、编译、测试和部署。然而,由于缺乏统一的规范,不同公司甚至不同项目之间的构建方式各不相同。Maven 从大量项目和构建工具中汲取经验和反思,总结出了一套高度完美且易于扩展的生命周期。这一生命周期将项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建过程进行了抽象和统一。需要注意的是,Maven 生命周期本身是抽象的,不能完成任何实际工作。 阅读详情

相关推荐

Ubuntu22环境下Xinference与RAGFLOW集成:构建高效rerank模型服务【实战指南】

本文详细介绍了在Ubuntu22.04系统上,通过部署Xinference模型推理服务来加载bge-reranker-base等rerank模型,并将其与RAGFLOW框架集成的完整实战指南。该方案实现了模型服务的解耦与灵活管理,有效提升RAG系统的检索精度与答案相关性,并提供了从环境配置、服务启动、网络连接到性能调优及常见问题排查的全流程解决方案。

pluto的博客 500

Rust 生命周期浅谈

生命周期是 Rust 中处理引用有效性的机制,确保引用在其引用的数据仍然有效时被使用。 生命周期注解(lifetime annotations)用于标识引用的生命周期,帮助编译器进行检查。

Xayla的博客 2054

Window10 intel realsense D435安装并实现opencv显示realsense读取的彩色和深度数据(QT+openCV+rsD35)

(1)点击"官方指南" 来到下载页,-&gt;最新的稳定版本发布 (本人下的2.16.5,现在最新2.17.0) 不需要做开发,只要下载Intel RealSense Viewer就好,这个就是相机的可视化界面,简洁明了。对应的安装包是Intel.RealSense.Viewer.exe。 本人的毕设要用到深度图做开发,所以安装Intel.RealSense.SDK.exe,SDK...

Pabebe的博客 1万+

生命周期标注到底是什么?硬核Rust生命周期——看不懂这篇文章等于压根没学会生命周期

结合具体又精炼的用例深入探讨生命周期,彻底搞清楚“生命周期是什么”的问题,扫清许多Rust开发者对生命周期的误区。

qq_54714089的博客 2794

Vivado 2023.1及更早版本永久License全功能解锁:HLS、System Generator等IP核使用详解

本文深入解析Vivado 2023.1及更早版本的全功能许可证,详细指导如何解锁HLS、System Generator等高级IP核。通过许可证类型对比、功能验证方法和实战应用指南,帮助FPGA开发者充分利用Vivado工具套件,提升复杂系统设计和算法加速的效率。

weixin_31286719的博客 379

Mask2former自定义数据集实现滑坡语义分割

先介绍一下这次用的数据集:Bijie Landslide Dataset,是武汉大学在Triplesat卫星上裁剪的数据集,包含770张滑坡(image、mask、dem、边界坐标txt)和2003张非滑坡数据(dem、image)。直接在ade20k修改,按照路径和设置将预处理数据放好,该步骤很快就能结束,打开的图片是全黑的,因为0和1在图片上肉眼较难区分。bijie的数据集可以直接使用,接下去的步骤是1、预处理数据。配置文件修改训练类别和训练类型,由于我们分割的是滑坡,所以进行语义分割。

weixin_57812838的博客 2215

flutter 生命周期详解

flutter 的生命周期大体可分为三大阶段:初始化阶段、状态变化阶段、销毁阶段。 然而在这三个阶段中,又分如下两个部分: 1. widget 生命周期 2. APP 生命周期

半身风雪 4009

从 SAP BTP trial 到第一个 CPI iFlow 的实操路线图

本文介绍了如何从零开始学习SAP CPI(现称SAP Integration Suite中的Cloud Integration能力)。主要内容包括:1)明确学习边界,建议使用SAP BTP trial账号进行个人练习,注意90天有效期限制;2)理解SAP BTP账号模型层级结构(Global Account→Subaccount→Space);3)详细说明申请trial账号流程,推荐选择Singapore区域以避免兼容问题;4)指导如何检查Entitlements和Quotas,强调应专注于SAP Inte

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 166

Maven的生命周期详解

本篇文章重点针对这几个问题进行讲解:maven的生命周期都有哪些阶段?maven的生命周期和插件到低有什么关联?插件和插件的目标有什么关联?假如我们要用某个插件,怎么上官网查找?怎么手动调用插件?

怪咖@的博客 8864

71、机器人与机器人控制器技术解析

本文深入解析了机器人控制器的通信接口、传感器数据采集与处理以及抓手技术三大核心技术。详细介绍了数字I/O、串行接口、总线系统和以太网等通信方式,探讨了各类传感器在焊接、装配、质量检测等场景中的应用,并阐述了手眼校准与路径校正的关键方法。同时,文章还分析了不同类型抓手的特点及选型设计原则,展示了机器人在现代工业自动化中的高效性与灵活性。通过实际编程示例与流程图,全面呈现了机器人系统的集成与控制逻辑。

gin88的博客 275

19、多项式基算术:原理与运算详解

本文深入探讨了有限域 $GF(2^m)$ 中的多项式基算术,详细介绍了加法、减法、乘法和平方运算的原理与实现方法。重点分析了多项式基表示形式、模约简技术以及乘法优化策略,如高基数乘法、并行与顺序乘法器设计,并提到了Karatsuba-Ofman算法在减少乘法次数方面的优势。此外,文章还讨论了多项式基算术在密码学、编码理论等领域的应用前景,并展望了未来在高效算法设计与硬件加速方面的研究方向。

yellow的专栏 150

Maven生命周期

Maven生命周期 个人网站 https://blog.deschen.cn/ 文章目录Maven生命周期一、Maven生命周期的定义二、Maven三套独立的生命周期三、Maven的插件 一、Maven生命周期的定义 Maven的生命周期就是为了对所有的构建过程进行抽象和统一。包括项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和生成站点等构建步骤。 二、Maven三套独立的生命周期 Maven提供了三套独立的生命周期:clean, default 和 site clean生命周期:清理项目

陈汉槟 7673

Firefox卸载卡住不动的解决方案

本文主要介绍了Firefox卸载卡住不动的解决方案,希望能对使用Windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 15万+

Rust生命周期标注(生命周期推断Lifetime Elision)生命周期约束、生命周期省略规则、关联生命周期、静态生命周期static

在 Rust 中,生命周期(Lifetime)是编译器用来确保所有引用在使用时都是有效的机制。它帮助避免悬垂引用(dangling references)和数据竞争(data races)。Book'a是一个生命周期参数,它在结构体定义和方法实现中用于标注引用的有效范围。在结构体Book

Dontla的博客 1974

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

rust学习之生命周期

生命周期的主要作用是避免悬垂引用,它会导致程序引用了本不该引用的数据。当存在多个引用时,编译器有时会无法自动推导生命周期,此时就需要我们手动去标注,通过为参数标注合适的生命周期来帮助编译器进行借用检查的分析。生命周期标注并不会改变任何引用的实际作用域,自身并不具有什么意义,其作用只是告诉编译器多个引用之间的关系。即表示返回值的生命周期与参数生命周期中的较小值一致。开头,名称往往是一个单独的小写字母,大多数人都用。活得一样久,同时函数的返回引用也至少跟。,小于它应该具备的生命周期。的作用域的重合部分。

2301_79967122的博客 1987

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

四、项目生命周期和开发生命周期

一、简介 我们知道项目是暂时性、临时性的工作,具有开始时间和结束时间。正如达尔文进化论与马克思主义哲学认为:世界上任何事物都有其产生、发展和灭亡的过程(自然生命周期)。项目同样有其生命周期,即开始、计划、执行和结束。 项目生命周期: 项目的生命周期是描述项目从开始到结束所经历的一系列阶段。 项目生命周期类型: 预测型或适应型。 开发生命周期: 项目生命周期内通常有...

科技小北 4165

项目生命周期、开发生命周期与产品生命周期的区别

项目生命周期、开发生命周期与产品生命周期的区别一级目录 一级目录

shuihusww的博客 3809

《Rust语言圣经》Rust教程笔记27:2.Rust基础入门(2.10Rust生命周期标注)(引用生命周期、返回值生命周期、结构体生命周期、生命周期消除、输入生命周期、输出生命周期、静态生命周期)

Rust 的生命周期机制用于确保引用的有效性,防止悬垂引用和数据竞争。在定义返回引用的函数时,必须正确地指定生命周期,以便编译器能够验证引用的有效性。上述longest函数需要添加生命周期注解才能正确编译和运行。T:'static我不知道支撑我一口气写完的勇气是什么,也许是不做完不爽夫斯基,也许是一些读者对本书的期待,不管如何,这章足足写了 17000 字,可惜不是写小说,不然肯定可以获取很多月票 😃。

Dontla的博客 1647

Maven 构建生命周期

Maven 构建生命周期定义了一个项目构建跟发布的过程。为了完成 default 生命周期,这些阶段(包括其他未在上面罗列的生命周期阶段)将被按顺序地执行。

2007

【Rust中的生命周期】

Rust中的生命周期就像泛型一样,需要在函数上也标注上生命周期,这并不代表函数的生命周期,而是通过此标识符告知编译器,本函数手动。形如【T : 'a】,【'b : 'a】,表达的即T or b的作用域范围 >= a;【'a】意味着,开发者应当意识到,以引用形式传出的返回值的生命周期不应大于x,y 中较小生命周期范围。rust生命周期的写法与其泛型编程中的泛型类型写法类似,也可以对比C++中的模板写法。随着Rust的升级发展,这样的写法已经几乎不需要人为编写,编译器会自行推导。,并不是,编译器依然无法判断。

m0_37719524的博客 1310

Activity&Fragment生命周期详解

生命周期,是初学Android必须要掌握的一个知识点,也是面试时最常问的知识点。

flueky的专栏 3607

uniapp生命周期

Uniapp提供了丰富的生命周期钩子函数,开发者可以根据需要进行使用和扩展。在应用程序开发中,需要注意生命周期函数的执行顺序和时机,避免出现一些不必要的问题和错误。应用生命周期是指应用程序从启动到关闭的整个过程,包括应用程序的启动、前后台切换、退出等。页面生命周期是指页面从创建到销毁的整个过程,包括页面的创建、显示、隐藏和销毁等。组件生命周期是指组件从创建到销毁的整个过程,包括组件的创建、更新、销毁等。

m0_64590669的博客 1万+

VUE 生命周期大全,包含路由器生命周期,单组件生命周期,父子组件嵌套生命周期

注意:在使用的过程中,如果发现路由卡住不动的情况下,仔细检查 next 的操作 拿beforeEnter 举例,如果你配置了 beforeEnter ,就需要设置next() ,让它有个出口,不然它就卡住了 注意:beforeEach 里可能会因为你的写法问题,陷入无限循环,请仔细检查,确保 next 在任何情况下严格调用一次,if判断时,需严格加上else...

不想成为可以改变世界的程序员,不是一个好程序员 3195

HarmonyOS的生命周期有哪些?HarmonyOS的生命周期

UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会经过UIAbility实例的创建和销毁,或者UIAbility实例发生了前后台的状态切换。提示1:页面销毁生命周期,测试体现不出来,是监测不到的,在日志中查看不到被销毁事件的执行。装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。只有被@Entry装饰的组件才可以调用页面的生命周期。

2301_78906928的博客 2490

uniapp生命周期:应用生命周期和页面生命周期

这个文件的作用包括:监听应用生命周期、配置全局样式、配置全局的存储globalData。:在生命周期中每个阶段会伴随着每一个函数的出发,这些函数被称为生命周期函数。:一个对象从创建、运行、销毁的整个过程被称为生命周期。本身不是页面,这里不能编写视图元素,也就是没有。// 只能在App.vue里监听应用的生命周期。// 从前台进入后台 (隐藏会出发)下进行切换的,是应用入口文件。中监听,在页面监听无效。// 初始化完成出发。// 显示成功会出发。

蓝鲸鱼计算机软件开发工作室 1373

Maven的生命周期

Maven的生命周期是一系列预定义的构建阶段,用于自动化和标准化项目构建过程。它包含三个核心生命周期:默认生命周期(负责编译、测试、打包和部署)、清理生命周期(清除构建输出)和站点生命周期(生成项目文档)。每个生命周期由多个有序阶段组成,如默认生命周期包括validate、compile、test、package等阶段。Maven通过这些生命周期组合管理项目构建全流程,确保构建过程的一致性和可重复性,使开发者能专注于业务逻辑而非构建细节。

记录大学四年代码 1285
上一篇: 页面类和页面事件
下一篇: Tapestry的service
flyingjava
博客等级 码龄20年 9粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值