一、注解的概念
Java 注解(Annotation)是 JDK 5 引入的一种特殊语法元数据,它可以嵌入到源代码中,为代码提供额外信息。注解不会直接影响程序的执行逻辑,但可以被编译器、工具或运行时环境读取和使用,用于代码分析、生成文档、配置信息等。
二、注解的作用
Java注解的核心作用是为代码提供元数据--即描述数据的数据。它不会直接影响程序的执行逻辑,但能为编译器、工具、框架或运行时环境提供额外的信息,从而实现各种功能拓展。具体作用可归纳为以下几类:
1、编译期检查与约束。
例如 @Override 注解:标记方法覆盖了父类的方法,编译器会校验该方法是否真的在父类中存在,若不存在则报错,防止拼写错误或逻辑错误。
2、标记代码状态与控制警告。
例如,标记过时元素:@Deprecated 注解用于标记类、方法或字段已过时,编译器会在开发者使用这些元素时发出警告,提示其可能被移除,建议替换为新实现;
抑制编译器警告:@SuppressWarnings 注解可指定忽略特定类型的警告(如未使用变量、unchecked 类型转换等),避免无关警告干扰开发。
3、简化配置与替代XML。
在框架开发中,注解常用来替代繁琐的 XML 配置,使配置信息与代码紧耦合,更易维护。
4、代码生成与增强。
工具或框架可通过注解在编译期或运行期自动生成代码,减少重复劳动。
5、运行时动态处理。
结合反射机制,程序可在运行时读取注解信息,动态调整逻辑。
6、文档生成。
例如@Documented 元注解标记的注解会被包含在 Javadoc 中,增强代码文档的可读性;自定义注解 @Author 标记类的作者,生成文档时会显示该信息,便于团队协作。
******注解的就像是给代码贴上标签,这些标签被工具或框架解读后,可实现编译检查、简化配置、代码生成、运行时逻辑扩展等功能。它让 Java 代码更简洁、灵活,是现代 Java 框架(如 Spring、MyBatis)和开发工具(如 Lombok)的核心技术之一。
三、注解的使用
1、注解的写法:注解时使用@interface关键字定义的,继承自Annotation接口。定义如下图所示:
该注解中有两个属性,使用default关键字可以为该属性设置默认值,这样在使用该注解时,就可以不用为该属性传入值。

2、注解的使用位置的声明:使用@Target注解,常见的取值有:
ElementType.TYPE:表示可以应用于类、接口、枚举、注解;
ElementType.METHOD:表示可以应用于方法;
ElementType.FIELD:表示可以应用于字段;
ElementType.CONSTRUCTOR:表示可以应用于构造函数;
ElementType.LOCAL_VARIABLE:表示可以应用于局部变量。
以上述注解为例,将其声明使用在类中:
@Retention(RetentionPolicy.RUNTIME) :描述了该注解的生命周期

声明User类,并使用注解Student:


运行结果:

四、java中常见的内置注解
1、@Override:标记方法覆盖了父类的方法,编译器会检查正确性
2、@Deprecated:标记已过时的元素,使用时会产生警告
3、@SuppressWarnings:抑制编译器警告
4、@FunctionalInterface:标记函数式接口(JDK 8+)
5、@FunctionalInterface:抑制可变参数的类型安全警告(JDK 7+)
五、元注解
用处:用来修饰注解的注解
1、@Target:指定注解可应用的元素类型(类、方法等);
2、@Retention:指定注解的保留策略(源码、字节码、运行时),声明了被定义的注解的生命周期,例如在上个例子中,该属性的取值为@Retention(RetentionPolicy.RUNTIME):表示该注解在运行时仍然可用,运行时虚拟机会保留注解,可以通过反射读取。其它的取值还有RetentionPolicy.SOURCE、RetentionPolicy.ClASS。
3、@Documented:标记注解会被包含在 Javadoc 中
4、@Inherited:标记注解可被子类继承
5、@Repeatable:允许注解在同一元素上重复使用(JDK 8+)
六、应用案例:使用注解自动生成SQL语句
1、注解,作用于类上,用于声明目标类所对应的表名
2、创建Student、User类,用于测试。
Student类对应的表名为t_stus

User类对应的表名为t_user

3、创建creatQuerySql类,生成sql语句
运行结果:


879

被折叠的 条评论
为什么被折叠?



