java注解的全面分析

作者:大白能 时间:2023-11-25 11:28:50 

全面解析java注解

Java中的常见注解

a.JDK中的注解

    @Override 覆盖父类或者父接口的方法
    @Deprecated 表示方法已经过时
    @SuppressWarnings("deprecation") 忽略方法过时警告

b.常见的第三方注解

    例如Spring中的@Autowired(自动注入)

注解的分类

a.按照运行机制分

    1.源码注解
        注解只在源码中存在,编译成class文件就不存在了

    2.编译时注解
        注解在源码和class文件中都存在
        eg:@Override、@Deprecated、@SuppressWarnings

    3.运行时注解
        在运行阶段还起作用,甚至会影响运行逻辑
        eg:@Autowired

b.按照来源分

    1.来自JDK的注解
    2.来自第三方的注解
    3.自定义注解

c.元注解:注解的注解

自定义注解

1.自定义注解的语法要求


import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
 String desc();
 String author();
 int age() default 18;
}

注意:

  • 使用@interface关键字定义注解

  • 成员以无参无异常方式声明

  • 可以用default为成员指定一个默认值

  • 成员类型是受限的,合法的类型包括原始类型以及String、Class、Annotation、Enumeration

  • 如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)

  • 注解类可以没有成员,没有成员的注解称为标识注解

2.元注解

a.@Target({ElementType.METHOD,ElementType.TYPE})

注解的作用域:

  • ElementType.CONSTRUCTOR 构造方法声明

  • ElementType.FIELD 字段声明

  • ElementType.LOCAL_VARIABLE 局部变量声明

  • ElementType.METHOD 方法声明

  • ElementType.PACKAGE 包声明

  • ElementType.PARAMETER 参数声明

  • ElementType.TYPE 类、接口

b.@Retention(RetentionPolicy.RUNTIME)

注解的生命周期:

  • RetentionPolicy.SOURCE 只在源码显示,编译时会丢弃

  • RetentionPolicy.CLASS 编译时会记录到class中,运行时忽略

  • RetentionPolicy.RUNTIME 运行时存在,可以通过反射读取

c.@Inherited

标识性的元注解:允许子类继承

d.@Documented

生成javadoc时会包含注解

使用自定义注解
语法:@注解名(成员1=成员值1,成员2=成员值2)


@Description(desc="I am demo",author="boy",age=18)
public void demo(){}

解析注解

概念:通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑

来源:http://blog.csdn.net/qq_28988969/article/details/53946862

标签:java,注解
0
投稿

猜你喜欢

  • Android实现底部导航栏功能(选项卡)

    2022-01-08 21:34:14
  • JavaFX实现简单日历效果

    2023-05-16 08:43:30
  • C#引用类型和值类型的适用场合和区别

    2022-10-20 03:37:25
  • 详解SpringBoot和SpringBatch 使用

    2023-08-17 19:00:38
  • 解决C#中Linq GroupBy 和OrderBy失效的方法

    2022-11-21 00:25:11
  • Java 判断一个时间是否在另一个时间段内

    2023-02-24 18:44:25
  • 在C#中使用二叉树实时计算海量用户积分排名的实现详解

    2023-05-15 07:51:12
  • Android关于获取时间的记录(小结)

    2021-10-28 04:55:12
  • SpringBoot 如何从容器中获取对象

    2023-12-06 08:20:40
  • C#识别出图片里的数字和字母

    2023-04-12 08:21:41
  • C语言实现稀疏矩阵

    2023-04-17 15:00:45
  • Java lombok中@Accessors注解三个属性的作用

    2022-04-20 14:32:27
  • Android中使用自定义ViewGroup的总结

    2021-12-18 04:25:39
  • maven中profile的使用

    2022-03-31 10:43:53
  • SpringMVC适配器模式作用范围介绍

    2023-12-10 23:37:15
  • Jenkins自动构建部署项目到远程服务器上的方法步骤

    2023-11-25 00:21:40
  • Java中list.contains()的用法及拓展

    2022-11-06 21:04:59
  • java使用回溯法求解数独示例

    2023-08-17 14:39:10
  • SpringCloud服务网关Gateway的使用教程详解

    2021-05-29 20:53:39
  • SpringCloud hystrix断路器与局部降级全面介绍

    2023-10-28 17:29:11
  • asp之家 软件编程 m.aspxhome.com