java - Jaxb2Marshaller 如何保存 JAXBContext

标签 java spring-boot jaxb spring-jms jaxb2

我使用MarshallingMessageConverter作为MessageConverter bean的实现。我使用 Jaxb2Marshaller 作为 org.springframework.oxm.Marshaller 类的实现。我将类设置为以这种方式绑定(bind):

marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})

我还可以使用 JAXBContext 类设置类并检索 Marshaller 和 Unmarashaller:

JAXBContext.newInstance(Class1.class,Class2.class)
jaxbContext.createMarshaller();
jaxbContext.createUnmarshaller();

这与 Jaxb2Marshaller 类似,因为它具有 JAXBContext 的内部字段。为每个解析请求创建新的 JAXBContext 非常昂贵。

我的问题是:如果我使用 Jaxb2Marshaller 声明 Marshaller ,则所有要在此调用中绑定(bind)的类 marshaller.setClassesToBeBound(new Class[]{Class1. class,Class2.class}) 将在每个解析请求中重用并且是线程安全的,或者将为每个请求再次创建此类中的 JAXBContext ?我使用这个 Jaxb2Marshaller 作为 Bean

最佳答案

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

关于java - Jaxb2Marshaller 如何保存 JAXBContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016480/

相关文章:

java - javascript 和 jquery 中的方法和函数重载

java - Spring Boot 子域国际化

java - Hazelcast 管理中心 - 成员无法沟通

JavaEE CDI 注入(inject) - 无法注入(inject) HttpServletRequest/Response

java - JasperFillManager.fillReportToFile 内存不足问题

java - 从 XSD 问题生成 JAXB 类

xml - xsd:dateTime 到 Java OffsetDateTime

jaxb - Moxy 不尊重父类(super class)/接口(interface)属性

java - 单例工厂方法

tomcat - gradle 问题 "main"groovy.lang.MissingPropertyException : No such property: baseDir for class: org. apache.catalina.core.StandardEngine