Annotation(注解)是JDK5+的特性。在使用Spring和Hibernate的过程中,碰到大量的Annotation,其中Hibernate的Annotation是支持JPA产生的,JTA已经成为Java EE的一个标准。因此Annotation是必须掌握的。
为什么要使用Annotation呢?之前看到一篇文章,说Annotation其实可以解决Java不能extends多个类的这一问题,赞成。
还有,像Spring这么一个大容器,Annotation使得它的许多容器类的方法从参数接口中解放出来,从而让我们使用者直接面对POJO编程,从这一点讲,Annotation的角色变成了一个“Interpreter”。
对于大多数Programmer而言,在JPA中,Annotation其实就是OR-Mapping XML文件的替代者。注意,JPA中的Annotation都是RUMTIME的,从灵活性的角度将,我们往往希望使用配置文件而不是Annotation。
下面是我common-util下的一个关于Java代码的注释:终于通过这个例子让我彻底掌握了Annotation这东东。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface JavaSource {
String author() default "treeClimber"; /* 作者 */
String email() default "xionglb@163.com"; /* 联系E_Mail */
String company() default "www.treeClimber.cn"; /* 公司名 */
String project() default "common-util"; /* 所属项目 */
String descript(); /* 类描述 */
float version() default 1.0f; /* 版本号 */
String created(); /* 创建时间 */
}
@Target( { ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface LastModified {
int year();
int month();
int date();
String modifier();
String descript();
String format() default "yyyy-MM-dd";
}
@JavaSource(version = 1.5f, project = "demoproj", descript = "学习Java5 Annotation", created = "2010-04-12")
public class JavaSourceTest {
@LastModified(modifier = "xiongsl", year = 2010, month = 5, date = 5, descript = "Add the Method")
public void say(String world) {
System.out.println("Hello, " + world);
}
@SuppressWarnings("deprecation")
public static void main(String[] args) {
if (JavaSourceTest.class.isAnnotationPresent(JavaSource.class)) {
JavaSource anno = JavaSourceTest.class.getAnnotation(JavaSource.class);
System.out.println("Author:" + anno.author());
System.out.println("Company:" + anno.company());
System.out.println("Descript:" + anno.descript());
}
try {
Method m = JavaSourceTest.class.getDeclaredMethod("say", String.class);
LastModified anno = m.getAnnotation(LastModified.class);
Date date = new Date(anno.year(), anno.month() - 1, anno.date());
System.out.println("LastModified by " + anno.modifier() + " At "
+ new SimpleDateFormat(anno.format()).format(date) + ", Note:"
+ anno.descript());
} catch (Exception e) {
e.printStackTrace();
}
}
}