我知道JAXBContext应该只创建一次,因为它相当昂贵,但是我很好奇是否为所有必需的类创建一个上下文,
JAXBContext newInstance(Class... classesToBeBound)
还是将所有上下文保存在地图中并创建(如果尚未创建)?
Map<Class, JAXBContext> map = new HashMap<>();
public JAXBContext getContext(Class clazz) {
if (map.get(clazz) == null) {
map.put(clazz, JAXBContext.newInstance(clazz));
}
return map.get(clazz);
}
最佳答案
我永远无法理解为什么人们每个班级甚至几个班级都创建JAXBContext
。
我更喜欢为特定的上下文路径创建JAXBContext
,通常是一个或多个与我需要使用的单个模式相对应的程序包。然后,我可以将其用于这些包中的所有类,并且它还涵盖更复杂的情况,例如替代组。
所以:
JAXBContext context = JAXBContext.newInstance("com.acme.foo:org.terra.bar");
如果要使其基于类,那么每个包将创建一个
JAXBContext
。还要考虑多线程访问,以便没有两个线程可以并行创建两个JAXBContexts
。