Java注解的实现原理

Java注解实际上只是对包、类、方法、成员变量等java程序进行标注。其本身没有业务逻辑、要实现注解相应的业务逻辑功能必须由另外的处理类来实现。

其基本原理就是通过java反射机制,获取这些java程序的包、类、方法、成员变量的注解、然后加以判断并实现相应的业务功能逻辑。

java的内置注解包括@Override、@Deprecated、@SuppressWarnings("unchecked")等,具体的实现逻辑是由编译器实现。

自定义注解只能通过@Interface关键字来定义、会自动继承java.lang.annotation接口。

在自定义注解时使用元注解来表明注解的作用域以及扩展其他功能,java中一共有四个元注解。

@Retention::定义了被注解的注解的生命周期,从RetentionPolicy中取值。

          SOURCE:在源文件中有效(即源文件保留

          CLASS:在class文件中有效(即class文件中保留)

          RUNTIME:在运行时有效(即运行时保留)

@Target:用于描述注解所能修饰的对象范围,从ElementType中取值。

          1.CONSTRUCTOR:用于描述构造器

     2.FIELD:用于描述域
     3.LOCAL_VARIABLE:用于描述局部变量
     4.METHOD:用于描述方法
     5.PACKAGE:用于描述包
     6.PARAMETER:用于描述参数
     7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Documented:可以让被该注解标示的注解被如javadoc此类的工具文档化

         生成javadoc的步骤:选中类所在的包—>project ->Generate Javadoc

         在生成的index.html中,注解信息会被文档化

    JUnit3:反射实现

     JUnit4:注解+反射实现

=================测试======================

------------------------------------------------

 自定义注解

package test;

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

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
String testAnnView() default "myview";

String value() default "default";
}

 ------------------------------------------------

 使用注解

class FieldAnn {
@MyAnnotation()
private String fieldA;

@MyAnnotation(testAnnView = "testAnnView")
private String fieldB;
}

 ------------------------------------------------

 实现注解逻辑

public class Test1 {

public static void main(String[] args) {
Class clazz = FieldAnn.class;
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
MyAnnotation myAnnotation = field.getAnnotation(MyAnnotation.class);
if (myAnnotation != null) {
System.out.println(field + ":" + field.getName() + "value:" + myAnnotation.testAnnView());
}

}
}

}

结果输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想天涯~路在脚下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值