Annotation简介
Annotation简介
Author: 曹祺
Email: Qi.Cao@Sun.Com
Blog: http://blogs.sun.com/greysh
难度:入门
源代码下载
http://developers.sun.com.cn/blog/functionalca/resource/Greysh/FCA_Greysh_Annotation.zip
原文链接:
http://developers.sun.com.cn/blog/functionalca/entry/annotation%E7%AE%80%E4%BB%8B
1.简述
2.HelloWorld
1.简述
从JDK 5开始,Java语言加上了元标签,这个可以看做是JavaDoc和XDoclet的发展。hibernate的实体映射可以用此方法也可以写配置文件,但是配置文件带来的一个问题就是XML配置文件很多,不好组织,但是用注释配置的方法,如果映射改变需要重新编译。具体应用还是看情况吧
2.HelloWorld
开发注解类并不难,主要用@interface声明
先看Helloworld的demo吧,代码如下:
注释类
package com.greysh.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Copyrights {
String author() default "Genix.Cao";
String email() default "Qi.Cao@Sun.Com";
String url() default "http://blogs.sun.com/greysh";
}
被注释类
package com.greysh.model;
import com.greysh.annotation.Copyrights;
public class Press {
@Copyrights()
public void book(){
System.out.println("New Book");
}
}
测试类
package com.greysh.test;
import java.lang.reflect.Method;
import com.greysh.annotation.Copyrights;
import com.greysh.model.Press;
public class TestBook {
public static void main(String[] args) {
Method[] methods = Press.class.getDeclaredMethods();
for (Method method : methods) {
Copyrights copyrights = method.getAnnotation(Copyrights.class);
System.out.println("Book of Author: " + copyrights.author());
System.out.println("Contact email: " + copyrights.email());
System.out.println("Contact url: " + copyrights.url());
}
}
}
程序运行的结果如下
Book of Author: Genix.Cao
Contact email: Qi.Cao@Sun.Com
Contact url: http://blogs.sun.com/greysh
用@interface声明后
String author() default "Genix.Cao";
表明注释可以增加author的字符串变量
@Retention(RetentionPolicy.RUNTIME)
是指定注释生成的策略,
如果是RUNTIME就是JVM编译后仍然存在
可以用jad反编译查看到
如果是SOURCE策略则JVM编译后不存在
@Target(ElementType.METHOD)
是指定注释写在那里
METHOD表示注释写在方法上
还有TYPE是类,接口,注释类,枚举值
CONSTRUCTOR指定是构造函数
LOCAL_VARIABLE是局部变量
然后Press这个类就指定了如何使用
因为有默认值,所以 @Copyrights()就可以不赋值
最后用TestBook做测试类
这里需要调用反射,核心代码是
Method[] methods = Press.class.getDeclaredMethods();
得到所有的带注解的方法
然后方法可以得到注解类
直接用调用对象的方法就OK了
自己写框架的时候,可以通过这种注解的方法减少配置文件
笔者最近在研究tomcat的源代码,里面很多配置就采用了此种方法
发表于 Sun Functional 校园大使 [JavaEE] ( 三月 20, 2009 06:22 下午 ) Permalink | 评论[0]
