日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

实施Jersey 2 Spring集成

發布時間:2023/12/3 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实施Jersey 2 Spring集成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Jersey是Oracle提供的出色的Java JAX-RS規范參考實現。 去年,當我們開始為大容量網站構建RESTful后端Web服務時,我們選擇使用JAX-RS API作為我們的REST框架和Spring框架來進行依賴項注入。 澤西島是我們選擇的JAX-RS實現。

項目啟動時,JAX-RS API 2.0規范尚未發布,Jersey 2.0也未發布。 由于我們沒有看到JAX-RS 1.1的任何根本缺陷,并且因為存在針對Jersey 1.1的穩定的Spring集成模塊,所以我們決定使用經過實踐檢驗的版本,而不是采用前沿技術。

盡管如此,我還是想知道采用更新版本會獲得什么,所以我開始在業余時間看一下JAX-RS 2 API并使用Jersey 2做一些原型設計。我注意到Jersey 2缺乏與Spring框架集成的功能,適用于以前的版本。 進一步研究該問題,我發現舊的Spring集成模塊無法直接移植到Jersey2。原因是Jersey 1建立在自定義內部依賴注入框架上,而Jersey 2已切換到HK2進行依賴注入。 ( HK2是在GlassFish中使用的有趣的,輕量級的依賴注入框架。)

我實現Jersey-Spring集成的最初目標非常簡單:

將在應用程序上下文XML中聲明的Spring bean注入到JAX-RS資源類中(使用@Autowired批注或XML配置)

因此,我認為我需要更深入地研究,并開始研究Jersey的源代碼。 我很高興地注意到,澤西島的開發正在以開放和平易近人的方式進行。 源代碼托管在GitHub上并經常更新。 經過一段時間的挖掘,Jersey Spring集成的高級設計開始形成。 在第一個可運行的原型制作之前,進行了大量的實驗和多次迭代。 那時,作為一個樂觀主義者,我希望我快完成了,并聯系了球衣用戶的郵件列表以獲取有關設計和實現的反饋。 反饋:添加更多用例,提供示例代碼,實現測試自動化,簽署Oracle貢獻者協議(從澤西軟件產品的角度來看,反饋當然是非常合理的)。 因此,雖然還沒有完全回到繪圖板上,但是到了這一點,我意識到最后一英里要比我期望的要長得多。

最終,Jersey-Spring集成最終合并到Jersey v2.2版本的Jersey 2代碼庫中。 集成API基于注釋,并支持以下功能:

  • 將Spring bean注入到Jersey管理的JAX-RS資源類中(使用org.springframework.beans.factory.annotation.Autowired或javax.inject.Inject)。 @Qualifier和@Named批注可用于進一步限定注入的實例。
  • 允許JAX-RS資源類實例生命周期由Spring而不是Jersey管理(org.springframework.stereotype.Component)
  • 支持不同的Spring bean注入范圍:單例,請求,原型。 Bean作用域在applicationContext.xml中聲明。

實施

Jersey-Spring集成的源代碼可在主Jersey源存儲庫中找到: https : //github.com/jersey/jersey/tree/2.5.1/ext/spring3/src/main/java/org/glassfish/球衣/服務器/Spring

Jersey-Spring集成包含以下實現類:

org.glassfish.jersey.server.spring.SpringComponentProvider

該ComponentProvider實現已在Jersey SPI擴展機制中注冊,它負責引導Jersey 2 Spring集成。 它使Jersey跳過了Spring組件的JAX-RS生命周期管理。 否則,Jersey會將這些類綁定到具有Jersey默認范圍的HK2 ServiceLocator,而無需遵守為Spring組件聲明的范圍。 該類還初始化HK2彈簧橋,并向HK2 ServiceLocator注冊Spring @Autowired注釋處理程序。 當在servlet上下文之外運行時,將定制的org.springframework.web.context.request.RequestScope實現配置為實現Bean的請求范圍。

org.glassfish.jersey.server.spring.AutowiredInjectResolver

HK2注入解析器,注入使用Spring框架@Autowired注釋聲明的依賴項。 HK2調用此解析器,并要求它解析使用@Autowired注釋的依賴項。

org.glassfish.jersey.server.spring.SpringLifecycleListener

處理容器生命周期事件。 重新加載時刷新Spring上下文,并在關閉時將其關閉。

org.glassfish.jersey.server.spring.SpringWebApplicationInitializer

一個便利類,可幫助用戶避免在web.xml中配置Spring ContextLoaderListener和RequestContextListener。 或者,用戶可以在Web應用程序web.xml中配置它們。

除了實際的實現代碼之外,該集成還包括示例和測試 ,這對于使開發人員入門非常有幫助。

JAX-RS規范定義了自己的依賴項注入API。 另外,Jersey支持不受JAX-RS規范要求的JSR 330樣式注入。 Jersey-Spring集成增加了對Spring樣式注入的支持。 JAX-RS注入和Spring集成都提供了一種將對象綁定到注冊表中的機制,以便以后可以查找和注入對象。 如果使用的是完整的Java EE應用程序服務器(例如Glassfish),則還可以選擇通過CDI API綁定對象。 在非Java EE環境中,可以通過嵌入容器實現(例如Weld)來使用CDI。 另一個綁定方法是使用Jersey特定的API。 測試代碼包括一個JAX-RS應用程序類,該類演示了如何完成此工作。

修改球衣Spring

如果您想在Jersey-Spring上工作,則需要查看Jersey 2的代碼庫并進行構建。 該過程相當容易并且有據可查: https : //jersey.java.net/documentation/2.5.1/how-to-build.html

您只需要克隆存儲庫并構建源即可。 構建系統基于Maven。 您還可以使用其Maven插件輕松地將代碼庫導入所選的IDE(與IDEA 12,Eclipse 4.3和NetBeans 8.0 beta進行了嘗試)。 但是,我注意到,某些集成測試在Maven 3.0中失敗了,我不得不升級到3.1,但是除此之外,沒有任何問題。

構建Jersey 2之后,您可以修改Spring集成模塊,并僅構建更改的模塊以節省時間。

測驗

Jersey-Spring集成測試已使用Jersey測試框架構建 ,并且在maven-failsafe-plugin的控制下運行。 集成測試由實際的測試代碼和測試執行的JAX-RS后端Webapp組成。 使用jetty-maven-plugin將后端部署到外部Jetty servlet容器中。 Jersey-Spring測試可以與其余測試分開執行。 集成測試可以在以下單獨的Maven子模塊中找到: https : //github.com/jersey/jersey/tree/2.5.1/tests/integration/spring3

除了演示Jersey-Spring的基本功能外,這些測試還展示了如何使用不同的Spring bean范圍:單例,請求,原型。 測試還展示了使用JAX-RS應用程序類在不同范圍內在容器中注冊您自己的依賴項。

結論

我認為JAX-RS 2.0 API提供了一種在Java中實現RESTful接口的好方法。 Jersey JAX-RS參考實現的開發正在以公開透明的方式進行。 澤西島還有大量活躍的用戶社區。

正如小弗雷德里克·布魯克斯(Frederick Brooks,Jr.)所說:“所有程序員都是樂觀主義者”。 通常很容易低估將代碼與相對較大和復雜的代碼庫集成所需的工作量,尤其是當您需要在多個不同框架(在此例中為Jersey,HK2和Spring框架)之間進行調解時。 此外,盡管Jersey擁有相當不錯的用戶文檔,但我錯過了有關設計和實現的高級體系結構文檔。 為了確定正確的集成點,需要進行大量的探索。 幸運的是,Jersey構建系統非常易于使用,并且僅允許構建選定的零件,這使得實驗和變更-構建-測試周期相對較快。

Jersey和Spring框架都提供了豐富的功能集,您可以通過多種方式一起使用它們。 當前形式的Jersey-Spring集成涵蓋了兩者之間的幾個基本集成方案。 如果發現您的特定情況不受支持,請加入jersey-users郵件列表進行討論。 您還可以檢出代碼,實施更改并通過在GitHub上提交拉取請求來貢獻它們。

參考:在實踐技術博客上,由我們的JCG合作伙伴 Marko Asplund 實現了Jersey 2 Spring集成 。

翻譯自: https://www.javacodegeeks.com/2014/02/implementing-jersey-2-spring-integration.html

總結

以上是生活随笔為你收集整理的实施Jersey 2 Spring集成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。