现在的位置: 首页 > 综合 > 正文

java 注解 annotation

2014年03月20日 ⁄ 综合 ⁄ 共 1301字 ⁄ 字号 评论关闭

最近重构代码,看到jpa中的一些注解。原来写过一些自己的注解,但是后来因为时间长久又忘记了。所以,今天通过看部分文档,重写写了一些小的测试注解。

首先介绍注解中的基本知识,这些都可以找到网上。一个注解的定义主要有三个元素来定义,其中为Documented, target,与rentention三个元素。三个元素的作用如下所述。

Target:用来标识该注解的使用场合,是使用在方法还是一个变量上。而各种场合由一个枚举类型ElementType来定义,其中ElementType的具体截图如下:

另外是注解在什么时候有效,就是@Retention注解的作用,它分三种,由另一个注解RetentionPolicy来标识。Class源文件(只存在源文件中),Resource编译后的文件(生存到编译后的文件),和Runtime运行期有效(在运行期依旧发挥作用)。

基本内容介绍结束,下面是例子。分三个类,Name开发的注解,是一个基于方法的注解;NameAnnotation使用注解的类;UserAnnotation是用来测试注解效果

代码如下:

import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;
@Target({METHOD})
@Retention(RUNTIME)
public @interface Name {
	String name() default "";
}

package free4lab.code2;

public class NameAnnotation {
	@Name(name = "testName")
	public String getName(){
		return null;
	}

package free4lab.code2;

import java.lang.reflect.Method;

public class UserAnnotation {
	
	public static void main(String[] args) throws Exception{
		Class<?> claz = Class.forName("free4lab.code2.NameAnnotation");
		Method[] method = claz.getMethods();
                boolean flag = method[0].isAnnotationPresent(Name.class);
                                                    //基于方法的注解,获取注解就是需要通过Method反射获取
                                                    //如果是基于类的注解,那么就需要通过claz.isAnnotationPresent(Name.class);来判断了

if(flag){System.out.println("....");Name n = (Name) method[0].getAnnotation(Name.class);System.out.println(n.name());}}}





抱歉!评论已关闭.