日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

cdi 2.7.5_看一下CDI 2.0 EDR1

發(fā)布時(shí)間:2023/12/3 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cdi 2.7.5_看一下CDI 2.0 EDR1 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

cdi 2.7.5

CDI是最近對Java EE最好的補(bǔ)充之一。 該觀點(diǎn)在用戶和集成商之間廣泛共享。 當(dāng)前版本的CDI 1.2于2014年4月發(fā)布。現(xiàn)在,在2015年中期,我們將面對CDI 2.0規(guī)范的早期草案。 CDI 2.0將在Java 8和更高版本上運(yùn)行。

最終版本計(jì)劃于2016年發(fā)布,該路線圖包含幾個(gè)有趣的項(xiàng)目:

  • 將API分為Java SE和Java SE兩部分:拆分API是支持微服務(wù)移動(dòng)的重要步驟。 從幾行中的每個(gè)main()引導(dǎo)CDI。
  • 異步事件和優(yōu)先事件允許控制事件觀察者的排序和異步事件傳遞
  • JDK 8:CDI 1.x針對Java 1.6及更高版本。 Java 8進(jìn)行了大量改進(jìn),并有助于簡化CDI的API。
  • CDI允許從起源開始擴(kuò)展。 SPI非常適合使用DeltaSpike,Spring Data,Camel,CDI度量標(biāo)準(zhǔn)等框架來增強(qiáng)CDI。 CDI 2.0旨在改善對擴(kuò)展的支持
  • 你知道嗎? CDI大量使用AOP來實(shí)現(xiàn)非常舒適的使用。 所有常規(guī)范圍(例如RequestScoped,ConversationScoped,SessionScoped和ApplicationScoped)都使用代理來查找上下文實(shí)例。 但是一個(gè)極限規(guī)格是,CDI不允許在本地方法調(diào)用上進(jìn)行自我注入或攔截。 AOP軟件包將解決這些問題并改進(jìn)規(guī)范的某些部分。

但是,讓我們來看看CDI 2.0 EDR的API(早期草案審查),它是新的且值得注意的

異步事件

異步事件是CDI用戶希望列表上的第一項(xiàng)。 該問題在2011年初提出,是CDI 2.0的重點(diǎn)之一。 為了啟用異步處理的事件并通過引入異步性不破壞現(xiàn)有代碼,必須進(jìn)行大量熱烈討論。 當(dāng)前草案需要雙端激活

public class AsyncEvents {@Injectprivate Event<MyEventPayload> event;public void triggerEvent() {event.fireAsync(new MyEventPayload());}public void asyncEventObserver(@ObservesAsync MyEventPayload payload) {System.out.println("Yay, I'm called async!");}public void eventObserver(@Observes MyEventPayload payload) {System.out.println("Yay, I'm called too. " + "Other @Observes are notified in order.");}public static class MyEventPayload {} }

可以通過對啟用了異步功能的觀察者的異步處理來觸發(fā)事件。 使用@Observes觀察者也會(huì)在調(diào)用線程中得到通知。 可以使用調(diào)用fireAsync時(shí)返回的CompletionStage跟蹤異步事件觀察器的CompletionStage fireAsync 。

當(dāng)事件處理處于活動(dòng)狀態(tài)時(shí),異步事件觀察器可以在上下文Bean實(shí)例上進(jìn)行操作。 默認(rèn)情況下,啟用的范圍是@RequestScoped和@ApplicationScoped 。 該@SessionScoped被排除variuous原因。 只要考慮一下會(huì)話在事件處理過程中結(jié)束時(shí)的行為方式即可。 在上下文實(shí)例中修改事件有效負(fù)載或數(shù)據(jù)時(shí),用戶應(yīng)注意效果。 CDI不會(huì)強(qiáng)制事件有效負(fù)載保持不變,但強(qiáng)烈建議您避免由于并發(fā)而導(dǎo)致競爭情況。

CDI容器負(fù)責(zé)提供多線程基礎(chǔ)結(jié)構(gòu)。 有時(shí),您想提供一個(gè)自己的執(zhí)行程序來控制并發(fā)級(jí)別或包裝異步調(diào)用。 fireAsync方法允許為每個(gè)調(diào)用指定單獨(dú)的執(zhí)行程序。

private ExecutorService executor;@Injectprivate Event<MyEventPayload> event;@PostConstructpublic void postConstruct() {int threads = Runtime.getRuntime().availableProcessors();executor = new ThreadPoolExecutor(threads, threads, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<Runnable>());}@PreDestroypublic void preDestroy() {executor.shutdown();}public void triggerEventWithExecutor() {event.fireAsync(new MyEventPayload(), executor);}

上面的示例創(chuàng)建/銷毀執(zhí)行器。 您可以將CDI管理的執(zhí)行器與生產(chǎn)者方法( @Produces )結(jié)合使用,并在需要的地方@Inject 。 CDI很酷,是嗎?

異步事件將仍然是一個(gè)熱門話題,這肯定不是其最終形式。

有序事件觀察者

在CDI 1.2中,使用事件觀察器時(shí)的通知順序是不可預(yù)測的。 在2.0中,這將發(fā)生變化。

public class PrioritizedEvents {@Injectprivate Event<MyEventPayload> event;public void trigger() {event.fire(new MyEventPayload());}public void observeBeforeOtherObservers(@Observes @Priority(Interceptor.Priority.APPLICATION + 499) MyEventPayload payload) {System.out.println("Notified before all other observers");}public void observeAfterOtherObservers(@Observes @Priority(Interceptor.Priority.APPLICATION + 501) MyEventPayload payload) {System.out.println("Notified after all other observers");}public static class MyEventPayload {} }

事件觀察者的順序可以通過應(yīng)用@Priority注釋來影響。 為什么受到影響卻不受控制?

這個(gè)問題的答案更長一些,您需要了解CDI的類型安全解析部分。 事件觀察者是根據(jù)其事件有效負(fù)載類型選擇的。 事件觀察者可以觀察不同的類型,接口,類,子類型,合格和不合格類型。 通過使用Event或BeanManager API,將在Event觸發(fā)時(shí)選擇事件觀察器。 您可以通過使用類型或其子類型來通知另一組事件觀察者。 因此,沒有可用的全局事件觀察者順序,這導(dǎo)致我們使用@Priority批注。

通過應(yīng)用@Priority可以提前通知某些事件觀察者,并在以后通知某些事件觀察者。 默認(rèn)值為Interceptor.Priority.APPLICATION + 500 ,結(jié)果為2500 。 這是所有不帶有@Priority批注的事件觀察器的默認(rèn)設(shè)置。

仔細(xì)觀察@Priority發(fā)現(xiàn),它僅適用于當(dāng)前類型。 這將一直更改到CDI 2.0最終版本為止。

Java SE的CDI

JavaSE的CDI從一開始就可用,或者我這樣說:您可以在JavaSE中啟動(dòng)Weld和OpenWebBeans,而無需JavaEE容器。 CDI 2.0僅指定了以標(biāo)準(zhǔn)方式引導(dǎo)CDI容器的標(biāo)準(zhǔn)方法。 這是我個(gè)人的最愛。

public class CDIJumpStart {public static void main(String[] args) {try(CDI<Object> cdi = CDI.getCDIProvider().initialize()) {cdi.select(MyApp.class).get().runMyApplication();}}private static class MyApp{public void runMyApplication(){// ...}} }

該代碼將啟動(dòng)CDI容器并調(diào)用一種方法來運(yùn)行您的應(yīng)用程序。 應(yīng)用程序完成后,將使用try-with-resources模式關(guān)閉容器。 用來啟動(dòng)一個(gè)獨(dú)立的,可能是微服務(wù)式應(yīng)用程序的代碼比Spring Boot長兩行。 與Spring或Dropwizard的主要區(qū)別在于生態(tài)系統(tǒng),我找不到現(xiàn)成的嵌入式Tomcat的集成。 我猜想,要成為JavaSE的CDI成為真正的微服務(wù)框架之類的替代品,需要花費(fèi)一些時(shí)間。

結(jié)論

CDI 2.0 EDR只是正在進(jìn)行的JSR365努力的一小部分。 有很多問題需要討論和說明。 JBoss的Weld團(tuán)隊(duì)會(huì)為規(guī)范的發(fā)展而努力,并會(huì)在將來的某個(gè)地方提出RI。 對于Java EE和SE,CDI是一個(gè)熱門話題,并且仍然非常有吸引力。 請繼續(xù)關(guān)注并遵循CDI 2.0

聯(lián)系CDI規(guī)范:

  • Spec網(wǎng)站: http : //www.cdi-spec.org/
  • GitHub: https : //github.com/cdi-spec/cdi
  • 主要郵件列表: https : //lists.jboss.org/mailman/listinfo/cdi-dev
  • CDI 2.0 JCP頁面: http : //jcp.org/en/jsr/summary? id = 365
  • IRC:irc://freenode.net/#cdi-dev
  • 推特:@cdispec
  • Google+: https : //plus.google.com/+CdiSpecOrgPage/posts

翻譯自: https://www.javacodegeeks.com/2015/09/a-look-on-cdi-2-0-edr1.html

cdi 2.7.5

總結(jié)

以上是生活随笔為你收集整理的cdi 2.7.5_看一下CDI 2.0 EDR1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。