我使用MarshallingMessageConverter
作为MessageConverter
bean的实现。我使用Jaxb2Marshaller
作为org.springframework.oxm.Marshaller
类的实现。我将类设置为以这种方式绑定:
marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})
我还可以使用JAXBContext
类来设置类,并检索Marshaller和Unmarashaller:
JAXBContext.newInstance(Class1.class,Class2.class)
jaxbContext.createMarshaller();
jaxbContext.createUnmarshaller();
这类似于Jaxb2Marshaller
,因为它的内部字段为JAXBContext
。为每个解析请求创建新的JAXBContext都是非常昂贵的。
我的问题是:如果我使用Marshaller
声明Jaxb2Marshaller
,则在此调用中绑定的所有类marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})
将在每个解析请求中重用,并且是线程安全的,或者{将为每个请求再次创建此类的{1}}吗?我将此JAXBContext
用作Jaxb2Marshaller
。
答案 0 :(得分:1)
根据JAXB规范-JAXBContext是线程安全的。不应编组Marshaller和Unmarshaller,并且每次使用时都应创建Marshaller和Unmarshaller,或者应使用某种线程安全服务将其包装以同步对编组器和解组器的访问。