Java 注解简介、原理、分类和常见使用场景【持续更新中】

java注解-最通俗易懂的讲解

简介

  1. 一种特殊的类, 相当于“标签”,用于注释说明,可修饰类、接口、方法、参数等。
  2. 注解本身不直接影响代码的操作,但可以被编译器或运行时环境用来生成额外的代码、文件等,或用来控制代码的行为。

实现原理

Java注解是通过反射(Reflection)API和注解处理器(Annotation Processors,在Java 6中引入)来实现的。注解处理器可以在编译时处理注解,生成新的源代码、文件或其他输出。而在运行时,可以通过反射API查询注解信息,并根据这些信息执行相应的逻辑。

自定义注解

注解的属性也叫做成员变量。注解只有成员变量没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。

@Documented
@Target({
   ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Description {
   
    String text() default "";
}

分类

元注解

元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。
可以这样理解:元注解也是一张标签,但是它是一张特殊的标签,它的作用和目的就是给其他普通的标签进行解释说明的。
元标签有 @Retention、@Documented、@Target、@Inherited、@Repeatable 5 种。

元注解中的RetentionPolicy、ElementType

@Documented
@Target({
   ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Description {
   
    String text() default "";
}

RetentionPolicy

RetentionPolicy 定义了注解的保留策略,即注解在何时有效。它有三个分类:

  1. SOURCE:注解只在源码中有效,在编译成.class文件时会被丢弃,不会被加载到JVM中。

    • 示例:虽然@Override注解实际上使用的是CLASS保留策略(因为它在编译时需要被检查),但如果你自定义一个只在源码中使用的注解,可以想象它是为了标记某些代码段或提供IDE中的特定功能,如@Todo("未完成的功能")
  2. CLASS:注解在编译时会被保留在.class文件中,但JVM加载类时不会保留注解,默认情况下注解会使用此策略。

    • 示例@Deprecated注解,它用于标记某个类或方法已过时,这个信息在编译时会被编译器读取,并可能生成警告,但不会被加载到JVM运行时环境中。
  3. RUNTIME:注解在运行时可通过反射API被读取。

    • 示例@Autowired(在Spring框架中),这个注解在运行时由Spring容器通过反射机制查找并注入依赖。

ElementType

ElementType 定义了注解可以应用的Java元素类型。它包含以下分类:

  1. TYPE:类、接口(包括注解类型)或枚举声明。

    • 示例@Component注解应用于类上,表示该类是一个Spring组件。
  2. FIELD:字段声明(包括枚举常量)。

    • 示例@Inject注解应用于字段上,表示该字段需要被注入依赖。
  3. METHOD:方法声明。

    • 示例@Test注解(JUnit框架中),用于标记某个方法是测试方法。
  4. PARAMETER:参数声明。

    • 示例@RequestParam注解(Spring MVC中),用于将HTTP请求参数绑定到控制器方法的参数上。
  5. CONSTRUCTOR:构造器声明。

    • 示例:虽然Java标准库中可能没有直接应用于构造器的注解示例,但在自定义注解时,你可以将其应用于构造器上,以表示某种特殊的构造器用途。
  6. LOCAL_VARIABLE:局部变量声明。

    • 示例@Var(假设的注解),用于标记局部变量具有某种特殊含义或需要特殊处理&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值