Java元注解编程:优雅声明式逻辑实现
作者:技术拾光时间:2026-06-20 10:34:02浏览:636
Java元注解不是用来“炫技”的,而是让自定义注解真正具备可配置、可复用、可被正确处理的能力。没用好元注解,自定义注解就只是个标签;用对了,它就能成为业务逻辑的声明式入口。 四大核心元注解各自管辖的领域 @Target:指明注解的书写位置 @Target用于定义注解能够应用在哪些程序元素上——是类、
Java元注解不是用来“炫技”的,而是让自定义注解真正具备可配置、可复用、可被正确处理的能力。没用好元注解,自定义注解就只是个标签;用对了,它就能成为业务逻辑的声明式入口。
四大核心元注解各自管辖的领域
@Target:指明注解的书写位置
@Target用于定义注解能够应用在哪些程序元素上——是类、方法、参数,还是连泛型参数都不放过?日常开发中,`ElementType.METHOD` 和 `ElementType.TYPE` 使用频率最高,但也不应忽略 `ElementType.PARAMETER`(用于校验入参)和 `ElementType.TYPE_PARAMETER`(泛型类型占位符),它们在框架扩展中越来越关键。@Retention:控制注解的存活周期
@Retention决定注解在哪个阶段有效。`SOURCE` 只在编译期有效(例如 `@Override`);`CLASS` 是默认值,注解会进入字节码但不加载到JVM;`RUNTIME` 才能让反射在运行时读取——只要需要反射解析注解(比如 Spring AOP 或自定义拦截器),就必须设为 `RUNTIME`,这一点很容易踩坑。@Documented:让注解出现在JavaDoc中
@Documented不改变运行行为,但对团队协作很实在。别人查看接口文档时,一眼就能看到 `@NonNull`、`@Deprecated` 等语义信息,省去反复翻代码的麻烦。@Inherited:允许子类继承父类注解
@Inherited注解只对类级别的注解生效,并且只作用于 `extends` 关系,不适用于接口实现或方法重写。换句话说,父类方法上的 `@Inherited` 注解,子类方法是不会自动继承的,这一点常被误解。
