【Java】注解 annotation的介绍与使用

最近重构代码,看到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);<pre name="code" class="java">                                                    //基于方法的注解,获取注解就是需要通过Method反射获取
                                                    //如果是基于类的注解,那么就需要通过claz.isAnnotationPresent(Name.class);来判断了
if(flag){System.out.println("....");Name n = (Name) method[0].getAnnotation(Name.class);System.out.println(n.name());}}}
 

 
 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值