mjn*_*mjn 18 java code-generation hibernate cxf jaxb
用生成的Java源代码,比如
所有生成的类都是"值对象"类型,没有业务逻辑.如果我向生成的源代码添加方法,如果我重复生成源代码,我将松开这些方法.
这些Java代码生成工具是否提供了"扩展"生成代码的方法?
例如,
Bri*_*new 15
对于JAXB,请参阅添加行为.
基本上,您将JAXB配置为返回您通常期望的对象的自定义实例.在下面的示例中,您将创建一个新对象PersonEx,它扩展了JAXB对象Person.这种机制非常有效,因为您从生成的类派生,而不是根本不改变JAXB类或模式.
package org.acme.foo.impl;
class PersonEx extends Person {
@Override
public void setName(String name) {
if(name.length()<3) throw new IllegalArgumentException();
super.setName(name);
}
}
@XmlRegistry
class ObjectFactoryEx extends ObjectFactory {
@Override
Person createPerson() {
return new PersonEx();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,@ Override指令对于JAXB对象更改很重要 - 它会阻止您的自定义变为孤立.
至于Hibernate,您可以调整代码生成中使用的模板文件来改变它们的行为.如果你想调整你可以编辑的HIbernate工具,例如:dao/daohome.ftl
您甚至可以在编辑.hbm.xml文件的"toString()"输出中添加字段
...
<property name="note" type="string">
<meta attribute="use-in-tostring">true</meta>
<column name="note" />
</property>
...
Run Code Online (Sandbox Code Playgroud)
对于日志记录和验证,您可以考虑将AOP与AspectJ一起使用(我不建议使用生成的代码,因为您可能需要多次从头开始构建).
归档时间: |
|
查看次数: |
12662 次 |
最近记录: |