溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Tapestry5新特性有哪些

發(fā)布時(shí)間:2021-12-24 11:48:10 來(lái)源:億速云 閱讀:102 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容介紹了“Tapestry5新特性有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Tapestry5新特性列表:

Tapestry5新特性一、組件類(lèi)不再需要繼承基類(lèi);

Tapestry5組件類(lèi)可以不受框架限制,不需要繼承基類(lèi),也不需要定義成抽象的,生命周期完全使用注釋來(lái)實(shí)現(xiàn)。

package org.example.myapp.components;   import org.apache.tapestry.MarkupWriter;  import org.apache.tapestry.annotations.ComponentClass;  import org.apache.tapestry.annotations.BeginRender;   @ComponentClass public class HelloWorld  {      @BeginRender     void renderMessage(MarkupWriter writer)      {          writer.write("Bonjour from HelloWorld component.");      }  }

@ComponentClass相當(dāng)于標(biāo)記extends BasePage

@BeginRender相當(dāng)于implements PageBeginRenderListener

Tapestry5新特性二、組件類(lèi)不再是抽象類(lèi),而是純粹的簡(jiǎn)單的POJO(plain old Java objects)

配置也完全用注釋實(shí)現(xiàn)了,包括IOC容器,也就是基于注釋配置的IOC容器,放棄了hivemind。module和service定義類(lèi):

package org.example.myapp.services;   import org.apache.tapestry.ioc.annotations.Id;   @Id("myapp")  public class MyAppModule  {    public static Indexer buildIndexer()    {      return new IndexerImpl();    }  }

需要注入的類(lèi):

@Inject("service:myapp.Indexer")  private Indexer  indexer;

也就是buildIndexer方法為固定寫(xiě)法,格式為build{serviceId}。當(dāng)然還有hivemind的影子,比如多module和contribute等等。

Tapestry5新特性三、不再使用XML配置文件和組件定義文件(.page,.jwc),所有的配置信息使用注釋(annotations)實(shí)現(xiàn)。

頁(yè)面和組件的配置文件都可以完全使用注釋來(lái)實(shí)現(xiàn),這個(gè)特性在Tapestry4中已經(jīng)可以使用了,沒(méi)什么新奇的,不過(guò)完全在注釋中配置,看著代碼有點(diǎn)亂,寫(xiě)多了就開(kāi)始懷疑這還是Java類(lèi)么。

例子:

package org.example.app.pages;   import org.apache.tapestry.annotations.Component;  import org.apache.tapestry.annotations.ComponentClass;  import org.example.app.components.Count;   @ComponentClass public class Countdown  {      @Component(parameters =      { "start=5", "end=1", "value=countValue" })      private Count _count;            private int _countValue;       public int getCountValue()      {          return _countValue;      }       public void setCountValue(int countValue)      {          _countValue = countValue;      }  }

Tapestry5新特性四、組件類(lèi)和模版的任何改變都可以馬上反應(yīng)出來(lái),不需要任何重啟。

Tapestry 5自動(dòng)重新加載改變過(guò)的類(lèi)和摸板,這個(gè)應(yīng)該是腳本語(yǔ)言的特性,但從說(shuō)明中好像只有組件類(lèi)有此特性,其他的類(lèi)可能還是需要重啟。不過(guò)這已經(jīng)是很大的進(jìn)步了,用java實(shí)現(xiàn)了腳本語(yǔ)言的動(dòng)態(tài)載入功能?,F(xiàn)在隨著越來(lái)越多的對(duì)classloader的研究,對(duì)Java的使用也越來(lái)越深入了。

Tapestry5新特性五、Blazing速度比Tapestry4的速度更快。

關(guān)于性能,沒(méi)有了解析配置文件的花銷(xiāo),估計(jì)Tapestry4中的初始化慢的問(wèn)題應(yīng)該可以解決了。如果說(shuō)比純servlet和jsp快的話(huà),那就要?dú)w功于cache的使用了。

總起來(lái)說(shuō)Tapestry5還是值得期待的,現(xiàn)在還處于開(kāi)發(fā)階段,許多特性都是沒(méi)有定型的,如果有更好的概念,估計(jì)HLS會(huì)加進(jìn)去了(PS:真是服了他了,Tapestry4.1加入了Ajax的功能,正要研究呢,卻又推出了這個(gè)T5,搞的我心癢癢的,不過(guò)好久沒(méi)有這種看到新特性的興奮了)。其中提出了許多的新概念還是很值得借鑒的,包括基于注釋的IOC容器,現(xiàn)在spring也推出spring-annotation包了;基于注釋的頁(yè)面顯示生命周期定義,@SetupRender、 @BeginRender、 @BeforeRenderBody等,這樣整個(gè)類(lèi)除了注釋外,沒(méi)有任何侵入性了,把注釋去掉就是個(gè)簡(jiǎn)單的java類(lèi),不需要繼承,不需要實(shí)現(xiàn)固定方法。而且Tapestry5的生命周期基于狀態(tài)機(jī)和隊(duì)列算法,而不是尾遞歸,這樣周期可以定義的很細(xì),而且實(shí)現(xiàn)起來(lái)也簡(jiǎn)單了。

“Tapestry5新特性有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI