靜態(tài)方法提供者 JAXB

2018-12-18 20:06 更新

javax.xml.bind.JAXB是2.1版本新增的工具類,其中所有的 public 方法均為靜態(tài)方法,可以直接通過(guò)類名調(diào)用。它存在的意義就是幫助使用者簡(jiǎn)單,快速上手JAXB。

JAXBContext

被緩存的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(...);
}

JAXB.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ì)象

JAXB.marshal(...)

同樣有很多重載的方法,方便使用者傳入不同類型的參數(shù)。

public static void marshal( Object jaxbObject, URL xml ) {}

第一個(gè)參數(shù)是對(duì)象Obj,可以傳入任意對(duì)象

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)