Xdoclet项目为java带来了面向属性编程的概念。即使在JDK1.5,java仍然没有支持声明的方式;因此XDoclet使用Javadoc的标签(@attribute)去指定类或者方法级的元数据属性。
Xdoclet作为一个Ant task的实现或者作为编辑过程的XML元数据。使用XDoclet来创建Hibernate的元数据很直接;我们可以不用手写,直接在持久化类中使用Javadoc的标记即可,具体可以参照列表3.6.
列表3.6
/**
*The Category class of the CaveatEmptor auction site domin model.
*@hibernate.class
*table=”CATEGORY”
*/
public class Category{
….
/**
*@hibernate.id
*generator-class=”native”
*column='CATEGORY_ID'
*/
public Long getId(){
return id;
}
….
/**
*@hibernate.property
*/
public String getName(){
return name;
}
…
}
通过Ant和带注解的类,我们可以自动的生成和列表3.4中相同的XML文档。
看起来使用XDoclet会增加编译的步骤,但是鉴于大部分Java项目都使用Ant,所以这并不会带来什么问题。另外一种说法是XDoclet在部署阶段的可配置性差,但是这些都不能成为你手工书写XML文件的理由。最后,对于XDoclet标记的验证可能会带来一些问题,然而,通过JetBrains IntelliJ IDEA和Eclipse可以简单完成标记名称的自动拼写。
到现在为止,我们已经讨论了XML和XDoclet的方式。假定在部署阶段所有的映射信息我们都已经获取到了。如果在程序启动之前我们仍然有一些信息无法获取,那么我们是否可以在运行时通过编程的方式来处理映射的元数据呢?