我使用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})将在每个解析请求中重用,并且将是线程安全的,或者将再次创建此类的JAXBContext对于每个请求?我将此Jaxb2Marshaller用作Bean

最佳答案

根据JAXB规范-JAXBContext是线程安全的。不应使用Marshaller和Unmarshaller,并且每次使用时都应该创建Marshaller和Unmarshaller,或者应使用某种线程安全服务将其包装以同步对Marshaller和Unmarshaller的访问。

10-07 20:53