Java自定义注解使用和详解
2021/8/16 20:06:26
本文主要是介绍Java自定义注解使用和详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
我们在做开发springboot 项目时候会遇到各种各样注解,使用各种各样注解,极大的简便了我们开发流程,方式,从JDK5开始支持 注解是Java
语言的一种强大的功能
可以理解为代码上的特殊标记,通过这些标记我们可以在编译,类加载,运行等程序类的生命周期内被读取、执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息
自定义注解
- 注解的定义修饰符为@interface
- 注解中可以添加成员变量,成员变量以
方法
的形式定义 - 需要使用@Retention注解来规定它的生命周期(编译期间、运行时等)
- 需要使用@Target注解来规定它的适用范围(类型、方法、字段、方法参数等)
package cn.soboys.kmall.common.annotation; import java.lang.annotation.*; @Target({ElementType.METHOD, ElementType.PACKAGE, ElementType.PARAMETER ,ElementType.TYPE,ElementType.FIELD}) @Documented @Inherited public @interface SysLog { String value() default ""; String message(); String[] names() default {}; }
@Inherited
注解规定了这个自定义注解是可以被继承的- 注解定义中
String value()
通过方法的方式定义了注解的成员变量value默认key
通过default
定义默认值 - 注解定义中
String message(); String[] names();
通过方法
的方式定义了注解的成员变量message和names,其中names为String数组
支持参数有
- 基本类型:byte, short, char, int, long, float, double
- String
- Class
- enum
- Annotation
在具体使用
的时候 通过反射找到添加该注解的类、方法或属性,然后根据注解中的字段取值判断该类或方法是否符合标准 然后在处理自己的相关业务逻辑
实列使用场景
一般结合Aop
来使用 这里通过后台日志记录作为使用场景 这里关于aop 使用请参考我前面的文章写的和详细
- 定义自定义注解
SysLog
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface SysLog { String value() default ""; }
- 定义日志拦截切面 SysLogAspect ,解析带有SysLog注解的controller
@Around("@annotation(sysLog)") public Object around(ProceedingJoinPoint joinPoint,com.yami.shop.common.annotation.SysLog sysLog) throws Throwable { long beginTime = SystemClock.now(); //执行方法 Object result = joinPoint.proceed(); //执行时长(毫秒) long time = SystemClock.now() - beginTime; SysLog sysLogEntity = new SysLog(); if(sysLog != null){ //注解上的描述 sysLogEntity.setOperation(sysLog.value()); } //请求的方法名 String className = joinPoint.getTarget().getClass().getName(); String methodName = joinPoint.getSignature().getName(); sysLogEntity.setMethod(className + "." + methodName + "()"); //请求的参数 Object[] args = joinPoint.getArgs(); String params = Json.toJsonString(args[0]); sysLogEntity.setParams(params); //设置IP地址 sysLogEntity.setIp(IPHelper.getIpAddr()); //用户名 String username = SecurityUtils.getSysUser().getUsername(); sysLogEntity.setUsername(username); sysLogEntity.setTime(time); sysLogEntity.setCreateDate(new Date()); //保存系统日志 sysLogService.save(sysLogEntity); return result; }
注解的松耦合性给编程带来了极大的便利。
这篇关于Java自定义注解使用和详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26JavaScript入门教程:从零开始学习JavaScript编程
- 2024-12-26JavaScript入门教程:从零开始学习JavaScript
- 2024-12-26JS编程入门指南:从零开始学习JavaScript
- 2024-12-25Java编程面试题详解与解答
- 2024-12-25TS基础知识详解:初学者必看教程
- 2024-12-252024面试题解析与攻略:从零开始的面试准备指南
- 2024-12-25数据结构与算法学习:新手入门教程
- 2024-12-25初学者必备:订单系统资料详解与实操教程
- 2024-12-24内网穿透资料入门教程
- 2024-12-24微服务资料入门指南