【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


相关文章
|
8天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
37 11
|
17天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
54 7
|
18天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
22天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
62 5
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
1月前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
46 1
|
1月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
39 1
|
1月前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
34 0
|
7月前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
7月前
|
存储 设计模式 算法
Java从入门到精通:2.1.1深入学习Java核心技术——掌握Java集合框架
Java从入门到精通:2.1.1深入学习Java核心技术——掌握Java集合框架