Jaxb2Marshaller 如何保存 JAXBContext
Jaxb2Marshaller how it holds JAXBContext
我使用 MarshallingMessageConverter
作为 MessageConverter
bean 的实现。我正在使用 Jaxb2Marshaller
作为 org.springframework.oxm.Marshaller
class 的实现。我设置 classes 以这种方式绑定:
marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})
我还可以使用 JAXBContext
class 设置 classes 并检索 Marshaller 和 Unmarashaller:
JAXBContext.newInstance(Class1.class,Class2.class)
jaxbContext.createMarshaller();
jaxbContext.createUnmarshaller();
这与 Jaxb2Marshaller
类似,因为它具有 JAXBContext
的内部字段。为每个解析请求创建新的 JAXBContext 非常昂贵。
我的问题是:如果我通过使用 Jaxb2Marshaller
声明 Marshaller
所有 class 将在此调用中绑定 marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})
将在每个解析请求中重复使用并且将是线程安全的,或者将为每个请求再次创建此 classes 中的 JAXBContext
?我用这个 Jaxb2Marshaller
作为 Bean
。
根据 JAXB 规范——JAXBContext 是线程安全的。 Marshaller 和 Unmarshaller 不是并且应该每次使用创建一次,或者用某种线程安全服务包装以同步对 marshaller 和 unmarshaller 的访问。
我使用 MarshallingMessageConverter
作为 MessageConverter
bean 的实现。我正在使用 Jaxb2Marshaller
作为 org.springframework.oxm.Marshaller
class 的实现。我设置 classes 以这种方式绑定:
marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})
我还可以使用 JAXBContext
class 设置 classes 并检索 Marshaller 和 Unmarashaller:
JAXBContext.newInstance(Class1.class,Class2.class)
jaxbContext.createMarshaller();
jaxbContext.createUnmarshaller();
这与 Jaxb2Marshaller
类似,因为它具有 JAXBContext
的内部字段。为每个解析请求创建新的 JAXBContext 非常昂贵。
我的问题是:如果我通过使用 Jaxb2Marshaller
声明 Marshaller
所有 class 将在此调用中绑定 marshaller.setClassesToBeBound(new Class[]{Class1.class,Class2.class})
将在每个解析请求中重复使用并且将是线程安全的,或者将为每个请求再次创建此 classes 中的 JAXBContext
?我用这个 Jaxb2Marshaller
作为 Bean
。
根据 JAXB 规范——JAXBContext 是线程安全的。 Marshaller 和 Unmarshaller 不是并且应该每次使用创建一次,或者用某种线程安全服务包装以同步对 marshaller 和 unmarshaller 的访问。