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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAX-RS 从傻逼到牛叉 5:资源的动态定位

發布時間:2025/6/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAX-RS 从傻逼到牛叉 5:资源的动态定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

目前我們的電影服務只提供了對電影信息的訪問服務,現在我們要再增加兩項級服務,分別用來訪問導演和演員信息。加上原先的電信信息服務,我們把 URI 統一放到/ms/rest/service/?的子路徑下。最先想到的方法就是為這三個 URI 分別寫 JAX-RS 服務:

@Singleton @Path("service/movie") public class MovieService {// 此處省略若干行 }@Singleton @Path("service/director") public class DirectorService {// 此處省略若干行 }@Singleton @Path("service/director") public class ActorService {// 此處省略若干行 }

這種寫法的缺點就是讓三個本來有點關系(父級 URI 相同)的服務被放到了毫不相干的三個類里面,不一個個類地查看注解難以看出這點關系。為此,JAX-RS 提供了動態資源綁定的功能,讓我們能夠對這種情況做一些整理。

首先,我們引入一個服務定位器來處理集中管理這三個子級服務:

@Singleton @Path("service") public class ServiceLocator {@Injectprivate MovieService movieService;@Injectprivate DirectorService directorService;@Injectprivate ActorService actorService;private Map<String, Object> serviceMap;@PostConstructprivate initServiceMap() {serviceMap = new HashMap<>();serviceMap.put("movie", movieService);serviceMap.put("director", directorService);serviceMap.put("actor", actorService);}@Path("{name}")public Object locateService(@PathParam("name") String name) {Object service = serviceMap.get(name);if (service == null) {throw new WebApplicationException(Status.SERVICE_UNAVAILABLE);}return service;} }

該類中的?locateService?方法根據服務的名稱返回相應的服務實例,注意該方法只有一個?@Path?注解,因為它并不清楚請求的具體內容;返回對象的類型為?Object,表明動態資源定位不要求服務類實現相同的接口,只需要它們的方法帶有相應的 JAX-RS 注解,就能夠被 JAX-RS 自動發現和處理(專業術語稱為 introspect,內省),以MovieService?為例:

@Singleton public class MovieService {@GET@Path("{id}")@Produces(MediaType.APPLICATION_JSON)public Movie find(@PathParam("id") int id) {Movie movie = movieDao.get(id);if (movie != null) {return movie;} else {throw new WebApplicationException(Status.NOT_FOUND);}}// 此處省略若干行 }

這樣,每個請求實際上都由兩個類先后處理。例如,處理請求?GET /ms/rest/service/movie/1?的時候,先由?ServiceLocator?返回相配的服務實例?movieService,然后再由該實例的?find?方法返回結果。比起最開始那三個簡單的類,雖然多了一層調用,但換來了更加清晰的結構。

動態資源定位是一個非常靈活強大的功能,用好的話,完全可以把 URI 層次整理成一個類似于文件目錄結構的抽象文件系統。

轉載于:https://my.oschina.net/lhplj/blog/170951

總結

以上是生活随笔為你收集整理的JAX-RS 从傻逼到牛叉 5:资源的动态定位的全部內容,希望文章能夠幫你解決所遇到的問題。

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