当前位置: 首页> 科技> 互联网 > 网页微信二维码付款怎么弄_工作日巴士驾驶2_直链平台_手机版百度入口

网页微信二维码付款怎么弄_工作日巴士驾驶2_直链平台_手机版百度入口

时间:2025/7/11 0:55:35来源:https://blog.csdn.net/a_beiyo/article/details/145688979 浏览次数:0次
网页微信二维码付款怎么弄_工作日巴士驾驶2_直链平台_手机版百度入口

概述

Java 注解(Annotation)可以附加在类、方法、字段等地方,提供元数据,供编译器、工具或运行时环境使用。自定义注解不仅可以帮助我们记录元数据,还可以通过反射或 AOP 等技术进行进一步处理。

1. 自定义注解的基本语法

在 Java 中,自定义注解的定义使用 @interface 关键字。注解的成员(也叫元素)是一些方法,但它们没有方法体。我们可以定义成员的默认值,也可以通过元注解来控制注解的使用方式。

基本语法:
public @interface MyAnnotation {String value() default "default"; // 可选的元素int count() default 1;           // 可选的元素
}

2. 常见的元注解

Java 提供了四个常用的元注解,它们用来描述其他注解的行为:

  • @Retention: 用于指定注解的生命周期,注解的保存位置。常见的值有:

    • RetentionPolicy.SOURCE: 只在源代码中存在,编译后丢弃。
    • RetentionPolicy.CLASS: 在编译时保留,JVM 可在类加载时读取,但运行时不可用。
    • RetentionPolicy.RUNTIME: 在编译时保留,运行时仍然可用(通过反射获取)。
  • @Target: 用于指定注解的适用位置。常见的值有:

    • ElementType.METHOD: 方法
    • ElementType.FIELD: 字段
    • ElementType.TYPE: 类、接口、枚举等
    • ElementType.PARAMETER: 参数
    • ElementType.LOCAL_VARIABLE: 局部变量
  • @Inherited: 表示注解是可以被继承的。当一个类继承另一个类时,父类上的注解可以被子类继承。

  • @Documented: 标记注解是否包含在 Javadoc 中。

3. 示例:自定义注解

下面是一个实际的示例,展示了如何自定义一个注解,并使用它来标记方法。

步骤 1: 定义注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME) // 运行时可用
@Target(ElementType.METHOD)          // 仅适用于方法
public @interface LogExecutionTime {String value() default "default"; // 可选的元素
}
步骤 2: 使用注解
public class MyService {@LogExecutionTime(value = "Method execution started")public void doSomething() {System.out.println("Doing something...");}
}
步骤 3: 反射获取注解信息

你可以通过反射来获取方法上的注解,并根据注解做相应的处理。

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;public class AnnotationProcessor {public static void main(String[] args) throws Exception {Class<?> clazz = MyService.class;for (Method method : clazz.getDeclaredMethods()) {// 检查方法是否包含 LogExecutionTime 注解if (method.isAnnotationPresent(LogExecutionTime.class)) {LogExecutionTime annotation = method.getAnnotation(LogExecutionTime.class);System.out.println("Method: " + method.getName());System.out.println("Annotation value: " + annotation.value());}}}
}

输出:

Method: doSomething
Annotation value: Method execution started

4. 应用场景

4.1 日志记录

上面的例子演示了如何通过自定义注解来记录方法执行时间,实际上你可以将 LogExecutionTime 注解用于日志记录框架,比如 Spring AOP,可以在方法执行前后自动记录日志。

4.2 权限控制

你可以定义一个注解来标记需要进行权限验证的方法,然后通过拦截器或 AOP 在方法调用前进行权限检查。

4.3 参数验证

通过自定义注解,可以对方法的参数进行验证,确保它们符合一定的规则(比如非空、符合特定格式等)。这种方式可以配合 AOP 等机制进行参数校验。

4.4 编译时检查

可以通过自定义注解配合处理器(例如 APT,即注解处理器)来实现编译时的检查或代码生成。

5. 使用 Spring AOP 结合注解实现功能

假设我们要利用 LogExecutionTime 注解来记录方法的执行时间,可以使用 Spring AOP 实现。

5.1. 添加 AOP 依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
5.2. 创建 AOP 切面
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;@Aspect
@Component
public class LogExecutionAspect {@Around("@annotation(LogExecutionTime)")  // 拦截所有标记了 LogExecutionTime 注解的方法public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {long startTime = System.currentTimeMillis();// 执行目标方法Object proceed = joinPoint.proceed();long executionTime = System.currentTimeMillis() - startTime;System.out.println("Method executed in: " + executionTime + "ms");return proceed;}
}

这样,当调用标记了 @LogExecutionTime 注解的方法时,Spring AOP 就会自动拦截并记录方法的执行时间。

总结

  1. 定义注解:使用 @interface 定义自定义注解,并可以通过元注解控制其作用范围。
  2. 应用注解:在类、方法等位置使用注解,给代码增加元数据。
  3. 处理注解:通过反射、AOP 等机制获取和处理注解,实现自动化处理。

注解的应用非常广泛,尤其在框架中。通过注解,我们能够使代码更加简洁、灵活,并且能够在编译时或运行时对元数据进行有效的处理。

关键字:网页微信二维码付款怎么弄_工作日巴士驾驶2_直链平台_手机版百度入口

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: