Java基础教程(六十六)注解:Java反射魔法,注解背后的黑科技大揭秘

一、注解基础回顾

注解(@Annotation)是Java 5引入的元数据机制,用于为类、方法、字段等元素添加标记或配置信息,本身不影响代码逻辑,需借助外部工具(如编译器、框架或反射API)处理。

二、反射操作注解的核心API

反射包java.lang.reflect提供关键接口和类:

· AnnotatedElement接口:Class、Method、Field等均实现此接口
· 核心方法:
· getAnnotation(Class):获取指定类型注解 · getAnnotations():获取所有注解 · isAnnotationPresent(Class):判断注解是否存在

三、实战示例:定义并解析自定义注解

1. 定义注解

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME) // 注解在运行时可见
@Target(ElementType.METHOD)         // 注解作用于方法
public @interface ApiEndpoint {
    String path();                  // 注解属性
    String method() default "GET";  // 带默认值的属性
}
  1. 使用注解标记目标方法
public class UserController {
    @ApiEndpoint(path = "/user/info", method = "GET")
    public void getUserInfo() {
        System.out.println("Returning user info...");
    }
}

2. 反射解析注解(核心)

import java.lang.reflect.Method;

public class AnnotationParser {
    public static void main(String[] args) {
        // 遍历目标类所有方法
        for (Method method : UserController.class.getDeclaredMethods()) {
            // 检查方法是否被@ApiEndpoint标记
            if (method.isAnnotationPresent(ApiEndpoint.class)) {
                ApiEndpoint endpoint = method.getAnnotation(ApiEndpoint.class);
                // 动态获取注解属性值
                System.out.println("Found API Endpoint:");
                System.out.println("Path: " + endpoint.path());
                System.out.println("HTTP Method: " + endpoint.method());
                System.out.println("Target Method: " + method.getName());
            }
        }
    }
}

输出结果:

Found API Endpoint:
Path: /user/info
HTTP Method: GET
Target Method: getUserInfo

四、典型应用场景

  1. 框架开发
    Spring MVC 通过 @RequestMapping 映射URL(原理同示例)
  2. 依赖注入
    Spring 的 @Autowired 利用反射查找并注入Bean
  3. 数据校验
    JSR-303 的 @NotNull、@Size 结合反射实现自动验证
  4. 序列化/反序列化
    Jackson 的 @JsonProperty 控制JSON字段映射

性能提示:反射操作有开销,高频场景建议缓存 Annotation 对象(如将Method与对应注解存入ConcurrentHashMap)。


结语

反射赋予Java注解动态生命力,使其从“静态标记”升级为“运行时指令”。深入理解反射操作注解的机制,开发者能更自如地构建高扩展性架构(如自定义框架、自动化工具)。掌握此“黑科技”,代码的灵活性与表现力将大幅跃升!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

值引力

持续创作,多谢支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值