注解的超容易入门(底层原理讲解)!!

先简单解释一下,注解是拿来干嘛使的。
简单的说,注解就是拿来给JVM看的,但是不参与编译。也就是说注解引导JVM做一些操作,但不对源码的执行产生影响。

JDK预定的注解

在Java中有一些常用的注解,已经由JDK帮我们定义好了,我们可以直接使用,(我)常用主要是以下三个:
1.@Override:重载
2.@Deprecated:表示该方法过期
3.@SuppressWarnings:压制警告
用法:@SuppressWarnings(“all”)表示压制所有的警告

自定义注解

自定义注解嘛顾名思义就是,自己按照自己的需求来定义一些注解。
在定义注解的时候,JDK还提供了一些用来修饰注解的注解,我们称之为“元注解”。

元注解

@Target:表示定义的注解的作用位置在哪里
一般取值如下:

取值 作用位置
TYPE
METHOD 方法
FIELD 变量

@Retention:该注解保留的生命周期
一般取值为RunTime
@Documented:标记该注解可否被抽取到API文档中
@Inherited:该注解可否被其子类继承

在定义注解时,会通过上述四个注解,来规定注解的一些规范。

定义注解

public @interface AnnotationName{
	属性列表;
	//属性列表类似接口中抽象方法的定义,可以定义的类型为:基本数据类型、String、枚举、注解及上述四种的数组
}

注意:如果在定义时使用了default值,在使用注解时可不进行属性赋值。

注解的本质
实现Annotation接口,注解中的每个属性就是对应抽象方法返回一个返回值。举个例子:
a.定义注解@pro:

public @interface pro{
	String ClassName();
}

b.对这段代码编译完成后的.class文件进行反编译可以得到如下代码:

public class pro implement Annotation{
	public String ClassName(String Name){
		return Name;
	}
}

可以发现,其实,注解的本质就是实现了Annotation接口。

使用自定义注解

1.获取使用注解标注的类的对象的字节码文件对象
2.获取注解对象
本质:在内存中生成了一个该注解接口实现类的对象
3.调用注解对象中定义的抽象方法,获取返回值

好烦,上面这段文字都是啥,看个代码吧

a. 定义一个注解

public @interface pro{
	String ClassName();
	String MethodName();
}

b.定义一个使用该注解的业务类

@Pro(ClassName = "...",MethodName = "...")//使用a中定义的注解
public class ReflectTest{
	...;
	...;
	...;
}

c.如何使用自定义注解

Class <ReflectTest> refTest = ReflectTest.class;//获取使用注解标注的类的对象的字节码文件对象
Annotation ann = refTest.getAnnotation(pro.class);//获取注解对象
String className = ann.ClassName();//获取注解中ClassName值
String methodName = ann.MethodName();//获取注解中MethodName值

完成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章