我有一个简单的转变。我有一个java对象转换成不同的java对象。所以我使用了xslt。 jaxb是我的处理器。
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是一个很好的方法?
答案 0 :(得分:0)
从性能的角度来看,它当然不是最优的:序列化为xml,xml的转换,xml的反序列化是昂贵的操作。 但是,它有时是有意义的,如果你有很多“相似”类(例如不同的字段名称但匹配逻辑(例如一个具有用户其他人字段等),因为编辑xslt表以提供工具转换更快更容易而不是创建新的Adapter类。
但你绝对应该加快速度,
创建jaxbContext一次,而不是每次调用,创建JAXB上下文是非常昂贵的操作。例如,将它存储在映射中,其中键是用于JaxbCreation的类:
protected static $_views = array(
'hugot_summary' => array(
'columns' => array(
'id',
'user_id',
'photo_id',
'hugot',
'url',
'comment_count',
'upvotes',
'created_at',
'updated_at'
),
),
);
同样的伎俩,变形金刚。
请记住变压器不是线程安全的,所以你需要 如果您的应用程序是多线程的,请在使用前在变换器上进行同步。