Java中的注解与反射

什么是注解?

注解本质上是一种给代码元素打标签的机制,它不会影响代码的运行逻辑,但可以通过工具、框架或者反射机制进行处理。

常见内置注解

  1. @Override:用于表示方法重写。
  2. @Deprecated:标记一个不建议使用的方法、类或字段。
  3. @SuppressWarnings:抑制编译器的警告。

自定义注解

可以通过@interface关键字定义自己的注解。自定义注解可以包含默认值,也可以通过注解的属性传递数据

// 定义自定义注解
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME) // 保留到运行时
@interface MyAnnotation {
    String value() default "default value";
}

// 使用注解
public class Example {
    @MyAnnotation(value = "Hello, 知识星球站!")
    public void myMethod() {
        System.out.println("这是一个带注解的方法。");
    }
}

在上面的例子中,我们定义了一个名为MyAnnotation的自定义注解,并在myMethod方法上使用了该注解。

注解的分类

注解根据其生命周期可以分为三类:

  1. 源代码注解:仅存在于源码中,编译后就被丢弃。例如@Override。
  2. 编译时注解:在编译时会被保留并写入到字节码中,但在运行时不可访问。
  3. 运行时注解:不仅保留在字节码中,而且可以在运行时通过反射获取。这类注解通常用于框架开发。

注解还可以通过@Retention注解来指定其生命周期:

  • RetentionPolicy.SOURCE:只保留在源码中,不进入字节码。
  • RetentionPolicy.CLASS:保留在字节码中,但运行时不可见。
  • RetentionPolicy.RUNTIME:运行时可见,可以通过反射访问。

如何使用反射解析注解?

当注解使用RetentionPolicy.RUNTIME时,可以在运行时通过反射机制获取注解的信息。下面的例子展示了如何使用反射解析注解。

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;

// 自定义注解
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
    String value() default "default value";
}

// 示例类
public class ReflectionWithAnnotation {
    
    @MyAnnotation(value = "星球知识站!")
    public void annotatedMethod() {
        System.out.println("随便写点啥.....");
    }
    
    public static void main(String[] args) throws Exception {
        // 获取类的Class对象
        Class<?> clazz = ReflectionWithAnnotation.class;

        // 获取方法
        Method method = clazz.getMethod("annotatedMethod");

        // 检查是否有注解
        if (method.isAnnotationPresent(MyAnnotation.class)) {
            // 获取注解
            MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
            System.out.println("注解值: " + annotation.value());
        }
    }
}

输出:

注解值: 星球知识站!

在上面的例子中,MyAnnotation注解被应用在annotatedMethod方法上。通过反射,我们能够在运行时解析这个注解,并获取其中的value值

注解的常见应用场景

  1. 框架开发:注解在框架开发中非常流行,Spring、JPA等框架都大量使用注解来配置和注入依赖。
  2. 代码生成和编译时处理:通过APT(Annotation Processing
    Tool),可以在编译时处理注解,生成额外的代码,如自动生成getter和setter。
  3. 单元测试:JUnit使用注解来标记测试方法,如@Test。

有兴趣的小伙伴可以关注我的公众号【知识星球站】一起讨论学习!!
在这里插入图片描述

我自横刀向天笑,去留肝胆两昆仑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

霜!!

不错,👆赏!!

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

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

打赏作者

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

抵扣说明:

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

余额充值