Java 重要知识点精讲:注解(Annotation)

布伽蒽 2026-04-29 20:52:58
加精

注解是 Java 从 JDK 5 开始引入的一种元数据机制,它本身不直接执行逻辑,却能为代码提供额外信息,被编译器、框架或运行时读取并使用。如今几乎所有主流 Java 框架都基于注解实现,是现代 Java 开发中必不可少的核心知识点。

一、什么是注解

注解可以理解为给代码贴的“标签”。
它不影响程序的正常运行,但可以被工具或框架识别,用来实现配置、校验、增强、自动注入等功能。
常见如 @Override、@Test、@Autowired、@RequestMapping 都是注解。

二、注解的作用

1. 编译期检查
让编译器提前发现错误,如 @Override 检查方法重写是否正确。

2. 替代配置文件
框架中用注解代替 XML,代码更简洁,如 Spring 中的 @Service、@Controller。

3. 运行时逻辑增强
结合反射实现自动注入、事务管理、权限校验、日志记录等。

4. 代码生成
编译时生成代码,如 Lombok 的 @Data 自动生成 getter/setter。

三、Java 内置标准注解

1. @Override
检查方法是否正确重写父类或接口方法。

2. @Deprecated
标记方法已过时,不推荐使用。

3. @SuppressWarnings
压制编译器警告。

4. @FunctionalInterface
标记函数式接口,确保只有一个抽象方法。

四、元注解(注解的注解)

元注解用于定义自定义注解,Java 提供 4 个核心元注解:

1. @Target
指定注解能用在哪里(类、方法、字段、参数等)。

2. @Retention
指定注解生命周期:

◦ SOURCE:仅源码

◦ CLASS:保留到字节码

◦ RUNTIME:运行时可通过反射读取(最常用)

3. @Documented
生成 Javadoc 时包含该注解。

4. @Inherited
子类可以继承父类的该注解。

五、自定义注解示例

简单定义一个注解,用于标记方法功能:
import java.lang.annotation.*;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodInfo {
    String author() default "unknown";
    String date();
}
使用:
public class Test {
    @MethodInfo(author = "张三", date = "2026-04-29")
    public void test() {
        System.out.println("测试方法");
    }
}
六、注解与反射结合使用

运行时读取注解是框架实现自动配置的核心原理:
Method method = Test.class.getMethod("test");
MethodInfo anno = method.getAnnotation(MethodInfo.class);
System.out.println(anno.author());
System.out.println(anno.date());
这就是 Spring、SpringBoot、MyBatis、JUnit 等框架的底层实现方式。

七、注解在实际开发中的应用

• Spring:@Component、@Autowired、@Configuration

• SpringBoot:@SpringBootApplication、@RestController

• MyBatis:@Mapper、@Select

• Lombok:@Data、@NoArgsConstructor、@AllArgsConstructor

• 校验:@NotNull、@NotBlank

八、总结

注解是 Java 实现简化配置、框架自动化、代码增强的关键机制。它让配置与代码合一,极大提升开发效率。
理解注解的定义、生命周期、元注解以及与反射的配合,是看懂框架源码、写出优雅 Java 代码的必备基础,也是面试高频考点。
 

...全文
29 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

151

社区成员

发帖
与我相关
我的任务
社区描述
这里专为新疆政法学院的探索者而建,英雄不问出处。起跑线是起点,热忱与坚持为加速器,无论bug缠身的项目,还是攻克的算法顿悟,每滴汗水皆被珍藏。执炬前行,终将照亮彼此峰顶,我们携手同行。
课程设计笔记经验分享 高校 新疆·图木舒克市
社区管理员
  • 雲中203
  • SHAO060706
  • 三叶草.
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

英雄不问出处

试试用AI创作助手写篇文章吧