我使用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的访问。