java里面的注解、元注解、自定义注解与使用

在学习框架之后,经常会使用到注解,比如@Resource,@Table等,注解都是以@开头,下面的代码用于自己定义一个注解:

package cn.zhao.test.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(value = { ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
	String value1() default "value1";//没有default时在使用本注解的时候必须指定值
	//使用本注解时不加属性名则必须有默认的value属性,仅只有一个value属性时value可省略
	String value();
	//使用本注解时要设置多个属性时,每个属性名都要加上,即便是value也不能省略
	String field2() default "field2";
}

在java里面,使用@interface来定义一个注解,就像class、enum一样,@interface是用来声明一个注解的。而上面的@Target与@Retention也是注解,它更准确的表达是用来注解注解的注解,这种注解就叫做元注解,java里面有四个元注解,上面我用到了两个。

@Target:用于指定自己定义的注解MyAnnotation可以在类、方法、还是属性上使用。ElementType.TYPE表示MyAnnotation这个自定义注解只能在类名上使用。

@Retention表示MyAnnotation这个注解在什么时候保留,RetentionPolicy.RUNTIME表示在运行时保留,这样我们就可以在运行时通过反射获取到被MyAnnotation注解的类了,如果你写为RetentionPolicy.SOURCE,那么这个注解将只在源码期间存活,编译后的class文件就不含有这个注解了,运行时也将不能获取。

自定义注解可以有多个属性,下面时注解的使用:

package cn.zhao.test.annotations;

@MyAnnotation(value="clsName",field2="f2")
public class MyClass {

}

好,自定义注解也定义了,在类上也加上了自己定义的注解,有啥用呢?wtf!没感觉到有啥用啊,是这样的哦:

现在我的类MyClass被自定义的注解修饰了,那么我们做的是需要通过反射技术获取到含有@MyAnnotation这个注解的类,然后再根据注解里面的属性与属性值做相应的操作,所以说,注解在日常开发中用到的是不多的,在框架里面才会经常用到。

针对上边的注解我们可以这样使用反射来操作:

package test;

import java.lang.annotation.Annotation;

import org.junit.Test;

import cn.zhao.test.annotations.MyAnnotation;
import cn.zhao.test.annotations.MyClass;
/**
 * 注解一般配合反射来使用
 * @author admin
 *
 */
public class TestAnnotation {
	@Test
	public void testAnno(){
		 Class clazz = MyClass.class;
	        Annotation[] annotations = clazz.getAnnotations();
	        for (Annotation annotation : annotations) {
	            MyAnnotation myAnnotation = (MyAnnotation) annotation;
	            System.out.println("type name = "+clazz.getName() + "|value1 ="
	            		 + myAnnotation.value1() + "  |  value = " + myAnnotation.value() 
	            		 + "|field2 = " + myAnnotation.field2());
	        }
	}
}

运行结果:

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值