Java 使用jaxb进行XSLT处理以获得较小的转换性能
我有一个简单的转换。我有一个java对象要转换成不同的java对象。所以我使用了xslt。jaxb是我的处理器Java 使用jaxb进行XSLT处理以获得较小的转换性能,java,performance,jaxb,xslt-1.0,Java,Performance,Jaxb,Xslt 1.0,我有一个简单的转换。我有一个java对象要转换成不同的java对象。所以我使用了xslt。jaxb是我的处理器 TransformerFactory transformerFactory = TransformerFactory.newInstance(); StreamSource streamSource = new StreamSource( new File("conv.xsl")); Transfo
TransformerFactory transformerFactory = TransformerFactory.newInstance();
StreamSource streamSource = new StreamSource(
new File("conv.xsl"));
Transformer transformer = transformerFactory.newTransformer(streamSource);
JAXBContext jc =JAXBContext.newInstance(Bags.class);
JAXBSource jAXBSource = new JAXBSource(jc, device);
jAXBResult = new JAXBResult(JAXBContext.newInstance(LargeBags.class));
transformer.transform(jAXBSource, jAXBResult);
return result.getResult();
从性能角度来看,这样做可以吗?我可以用java代码实现这一点。这是一个很大的性能问题吗?还是一种好的做法?请帮助我,并感谢您的评论。除此之外,如果我有小的分组和计算,xslt是一种好方法吗?从性能的角度来看,它当然不是最佳的:序列化到xml、转换xml、从xml反序列化都是代价高昂的操作。 但是,如果您有很多“相似”的类,例如不同的字段名,但有匹配的逻辑(例如有用户-其他人字段等),这有时是有意义的,因为编辑xslt表以提供实现转换比创建新的适配器类更快、更容易 但你绝对应该加快速度 创建jaxbContext一次,而不是每次调用,创建JAXB上下文是非常昂贵的操作。例如,将其存储在映射中,其中键是用于JAXBC创建的类:
JAXBContext getContext(Class cls) {
if (contexts.containsKey(cls)) return contexts.get(cls);
JAXBContect context = JAXBContext.newInstance(cls);
contexts.put(cls,context);
return context;
}
...
JAXBContext jc =getContext(Bags.class);
同样的把戏,变形金刚
请记住,变压器不是线程安全的,所以您需要
如果应用程序是多线程的,则在使用is之前在转换器上进行同步