【Java基础】JavaCore核心-注解技术

简介: 【Java基础】JavaCore核心-注解技术

23fd6e5a7cf740c292b270bd4f5d35ec.jpg

1.什么是Java注解

  • 是在 JDK5 时引入的新特性,其实就是代码里的特殊标记
  • 注解也被称为元数据, 是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用
  • 允许开发人员在不改变源代码的情况下,在源代码中添加一些元数据
  • 以便让编译器或者其他工具可以读取这些元数据,从而实现更高级的功能
  • 应用场景丰富
  • 生成文档
  • 编译时进行格式检查,如@Override
  • 替代配置文件功能,比如spring的注解
  • 和反射组合应用,自己封装框架组件
  • 注解的声明@interface
  • 用来声明一个注解,可以通过default来声明参数的默认值
  • 自定义注解时,自动继承了java.lang.annotation.Annotation接口
  • 通过反射可以获取自定义注解
public @interface Test {
}

2.Java注解类型

  • Java自带的标准注解(这些注解后编译器就会进行检查)
  • @Override 标记覆写父类的方法
  • dc31e298bcff4c8da5e6de75aecf9510.jpg
  • @Deprecated 标记被修饰的类或类成员、类方法已废弃、过时


b512b971da0d46be8f0716cc620e401b.jpg

  • @SuppressWarnings 用于关闭对类、方法、成员编译时产生的特定警告。
  • 元注解也是Java自带的标准注解,只不过用于修饰注解,比较特殊。
  • @Retention、@Target、@Inherited、@Documented、@Repeatable
  • java内置4种元注解
  • @Target表示该注解用于什么地方
  • ElementType.CONSTRUCTOR 用在构造器
  • ElementType.FIELD 用于描述域-属性上
  • ElementType.METHOD 用在方法上
  • ElementType.TYPE 用在类或接口上
  • ElementType.PACKAGE 用于描述包
  • @Retention 表示在什么级别保存该注解信息
  • RetentionPolicy.SOURCE 保留到源码上
  • RetentionPolicy.CLASS 保留到字节码上
  • RetentionPolicy.RUNTIME 保留到虚拟机运行时(最多,可通过反射获取)
  • @Documented 将此注解包含在 javadoc 中
  • @Inherited 是否允许子类继承父类中的注解
  • 用户可以根据自己的需求定义注解
  • 9507b920ab5b4ed19c421d4f97dad2e9.jpg

3.自定义注解案例实战

  • 需求
  • 实现一个类似junit单元测试的注解,可以批量运行某个类的全部加了注解的方法
  • 需要支持支持自定义优先级执行,且支持不测试某个方法的开关
  • 知识点
  • 反射上面获取自定义注解,作用范围 Class 、Method、Field都支持
方法 说明
getAnnotations( ) 获取类、方法等上的所有注解内容
getAnnotation(XXX.class) 获取到注解的内容
isAnnotationPresent(XXX.class) 判断某个注解是否存在

  • 编码实战
  • 定义注解类
//包含在DOC中
@Documented
//允许子类继承父类中的注解
@Inherited
//作用在方法上
@Target(ElementType.METHOD)
//保留到JVM运行上
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
    //定义优先级,默认是0
    int priority() default 0;
    //是否要禁用,默认是false
    boolean disabled() default false;
}
  • 定义目标类
public class MainTest {
    @Test(priority = 1)
    public void test1(){
        System.out.println("执行test1()....");
    }
    @Test(priority = 2)
    public void test2(){
        System.out.println("执行test2()....");
    }
    @Test(priority = 3)
    public void test3(){
        System.out.println("执行test3()....");
    }
    @Test(priority = 4)
    public void test4(){
        System.out.println("执行test4()....");
    }
}
  • 定义测试类
public class TestCore {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        Class<MainTest> mainTestClass = MainTest.class;
        //创建 MainTest 对象
        MainTest mainTest = mainTestClass.newInstance();
        //获取MainTest中所有的方法
        Method[] declaredMethods = mainTestClass.getDeclaredMethods();
        //定义Method集合
        List<Method> methods = new ArrayList<>();
        //过滤是否有禁用执行的方法
        for (Method declaredMethod : declaredMethods) {
            Test annotation = declaredMethod.getAnnotation(Test.class);
            if(!annotation.disabled()){
                methods.add(declaredMethod);
            };
        }
        //对list中的数据进行排序,按照优先级执行
        methods.sort(Comparator.comparingInt(obj->obj.getAnnotation(Test.class).priority()));
        //遍历集合执行方法
        methods.forEach(method -> {
            try {
                method.invoke(mainTest);
            } catch (Exception e) {
                System.out.println("执行方法失败");
            }
        });
    }
}

eec5347aa195448caa534c94641e9879.jpg


相关文章
|
1月前
|
监控 Cloud Native Java
Quarkus 云原生Java框架技术详解与实践指南
本文档全面介绍 Quarkus 框架的核心概念、架构特性和实践应用。作为新一代的云原生 Java 框架,Quarkus 旨在为 OpenJDK HotSpot 和 GraalVM 量身定制,显著提升 Java 在容器化环境中的运行效率。本文将深入探讨其响应式编程模型、原生编译能力、扩展机制以及与微服务架构的深度集成,帮助开发者构建高效、轻量的云原生应用。
152 44
|
26天前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
219 1
|
2月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
67 4
|
2月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
503 1
|
2月前
|
Java 测试技术 API
2025 年 Java 开发者必知的最新技术实操指南全览
本指南涵盖Java 21+核心实操,详解虚拟线程、Spring Boot 3.3+GraalVM、Jakarta EE 10+MicroProfile 6微服务开发,并提供现代Java开发最佳实践,助力开发者高效构建高性能应用。
327 4
|
26天前
|
安全 Cloud Native Java
Java 模块化系统(JPMS)技术详解与实践指南
本文档全面介绍 Java 平台模块系统(JPMS)的核心概念、架构设计和实践应用。作为 Java 9 引入的最重要特性之一,JPMS 为 Java 应用程序提供了强大的模块化支持,解决了长期存在的 JAR 地狱问题,并改善了应用的安全性和可维护性。本文将深入探讨模块声明、模块路径、访问控制、服务绑定等核心机制,帮助开发者构建更加健壮和可维护的 Java 应用。
139 0
|
2月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
152 3
|
安全 Java 编译器
Java其他: 什么是Java中的注解(Annotation)?
Java其他: 什么是Java中的注解(Annotation)?
175 0
|
SQL XML SpringCloudAlibaba
Java独有特性:注解(annotation)
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它本身并不起任何作用,可以说有它没它都不影响程序的正常运行,注解的作用在于**「注解的处理程序」**,注解处理程序通过捕获
366 0
|
Java 编译器 开发者
Java注解(Annotation)技术深入解析
Java注解(Annotation)技术深入解析
585 1

热门文章

最新文章