W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
javax.xml.bind.JAXB
是2.1版本新增的工具類,其中所有的 public 方法均為靜態(tài)方法,可以直接通過(guò)類名調(diào)用。它存在的意義就是幫助使用者簡(jiǎn)單,快速上手JAXB。
被緩存的JAXBContext
,為了性能上的考慮,將會(huì)對(duì)JAXBContext
做緩存,不過(guò)緩存使用到了WeakReference
,不用擔(dān)心 GC 問(wèn)題。
每次在創(chuàng)建JAXBContext實(shí)例時(shí),JAXBContext內(nèi)部都需要維護(hù)好Java類和XML之間的映射關(guān)系,這個(gè)操作十分消耗性能。不過(guò)JAXBContext是線程安全的,可以共享。一種較好的做法是,在程序初始化時(shí),傳入所有的Class,在使用時(shí)直接調(diào)用創(chuàng)建好的
JAXBContext
實(shí)例,而不是在每次使用時(shí)創(chuàng)建。
JAXBContext
是線程安全的,但是Marshaller
, Unmarshaller
, 和 Validator
都不是線程安全的。
在多線程環(huán)境下,應(yīng)該使用類似下面的方式來(lái)初識(shí)化JAXBContext
。
class MyServlet extends HttpServlet {
static final JAXBContext context = initContext();
private static JAXBContext initContext() {
return JAXBContext.newInstance("....", MyServlet.class.getClassLoader());
}
}
同時(shí),在使用JAXB時(shí),可以類似下面的方式獲取Unmarshaller/Marshaller/Validator
。
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
Unmarshaller u = context.createUnmarshaller();
u.unmarshal(...);
}
有很多重載的方法,方便使用者傳入不同類型的參數(shù)。使用者不需要關(guān)心實(shí)現(xiàn)的細(xì)節(jié),傳入你需要轉(zhuǎn)換的數(shù)據(jù),加上需要生成的類,就能得到需要的數(shù)據(jù)。
public static <T> T unmarshal( URI xml, Class<T> type ) {}
返回值使用的是泛型T,可以得到任意對(duì)象
同樣有很多重載的方法,方便使用者傳入不同類型的參數(shù)。
public static void marshal( Object jaxbObject, URL xml ) {}
第一個(gè)參數(shù)是對(duì)象Obj,可以傳入任意對(duì)象
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: