注解之自定义注解实现

Spring 自定义注解的实现与使用 *** 自定义权限校验接口* @author 亿先生* @date 2024年1月23日18:57:15*/修饰符访问修饰符必须为 public , 不写默认为pubic;关键字关键字为 @interface;注解名称注解名称为自定义注解的名称,例如上面的 XinLinLog 就是注解名称注解类型元素注解类型元素是注解中内容,根据需要标志参数,例如上面的注解的value; 阅读详情

概述
Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优雅。
本文主要介绍使用自定义注解+AOP来实现。

一、注解概念

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

二、注解分类

在Java中,注解分为两种,元注解和自定义注解。

三、常用元注解作用 (jdk提供的元注解)

1.@Target:描述当前注解能够作用的位置
ElementType.TYPE:可以作用在类上
ElementType.METHOD:可以作用在方法上
ElementType.FIELD:可以作用在成员变量上

2.@Retention: 描述注解被保留到的阶段
SOURCE < CLASS < RUNTIME
SOURCE:表示当前注解只在代码阶段有效
CLASS:表示该注解会被保留到字节码阶段
RUNTIME:表示该注解会被保留到运行阶段 JVM
自定义的注解:RetentionPolicy.RUNTIME

3.@Documented:描述注解是否被抽取到JavaDoc api中
4.@inherited:描述注解是否可以被子类继承

四、示例-AOP反射获取注解

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;

/**
 * @Author 
 * @Date 2022/7/13 16:45
 * @Description
 * @Version 1.0
 */
@Inherited
@Documented
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckSign {

    /**
     * 设定名称
     **/
    String name() default "";

    /**
     * 设定默认验签长度
     **/
    int signLength() default 2;
}

2、第二步通过AOP拦截处理

注:导包缺少自定义异常、验签工具类等请求对象

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * @author :
 * @date :Created in 19:54 2022/7/13
 * @description :
 * @version: 1.0
 */
@Component
@Scope
@Aspect
@Slf4j
public class CheckSignInterceptor {

    @Resource
    protected HttpServletRequest httpServletRequest;

    /**
     * 定义切入点
     * @Author 
     * @Date Created in 19:54 2022/7/13
     * @Description com.*.annotation.CheckSign为自定义注解类包全路径
     * @param
     * @return void
     **/
    @Pointcut("@annotation(com.*.annotation.CheckSign)")
    public void limit() {
    }

    @Around("limit()")
    public Object around(ProceedingJoinPoint proceedingJoinPoint) throws IOException {
        Signature signature = proceedingJoinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        CheckSign checkSign = methodSignature.getMethod().getDeclaredAnnotation(CheckSign.class);
        int signLength = checkSign.signLength();
        String name = checkSign.name();
        TestRequest testRequest = new ObjectMapper().readValue(httpServletRequest.getInputStream(), TestRequest.class);
        Object obj = null;
        if (MessageDigest5Util.isPass(testRequest, signLength)) {
            try {
                obj = proceedingJoinPoint.proceed();
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
        } else {
            log.warn("方法:{},{}签名校验失败", name, ExceptionCode.UNAUTHORIZED_ACCESS);
            throw new CommonException(ExceptionCode.UNAUTHORIZED_ACCESS.getCodeValue(), "签名校验失败");
        }
        return obj;
    }
}
JAVA项目中自定义注解的场景及实现 【代码】JAVA项目中自定义注解的场景及实现。 阅读详情

相关推荐

自定义注解--实现参数校验

学习内容: 自定义注解,校验传入数据是否为“asc”或“desc” 学习心得: 1.自定义注解的基本步骤: 在项目中新建一个包annotation,用于以后存放自定义的注解。 在annotation包中新建一个注解类,根据注解的功能命名,命名需要遵循大驼峰法则。 在注解类的类名上方,添加注解 @Target(用于说明注解可以应用的范围,比如类、类的属性、方法、方法参数等) @Retention(用于说明注解起作用的时间,比如在源代码中、在编译时、在运行时) @Constraint实现注解的功能时需要用,

weixin_58633569的博客 1496

Java-9.19

异常 Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: Error 和 Exception。其中 Error 用来表示 JVM 无法处理的错误,Exception 分为两种: 受检异常 :需要用 try…catch… 语句捕获并进行处理,并且可以从异常中恢复; 非受检异常 :是程序运行时错误,例如除 0 会引发 Arithmetic Exception,此时程序崩溃并且无法恢复。 泛型 public class Box<T> { // T stands for

Desperate_gh的博客 708

注解的实现原理及如何自定义注解

1.前言 在springmvc及springboot中,注解随处可见,我们几乎每天都在跟他打交道;那么如何自定义注解呢?自定义注解会不会更香呢 2.Java注解理解 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然

zhangxing 1790

spring自定义注解及使用

一文搞懂spring自定义注解及使用场景

ZHANGLIZENG的博客 9996

自定义注解

自定义注解,元注解介绍,注解的反射.

从Chiplet到UCIE:D2D互联技术如何重塑半导体设计生态

本文探讨了D2D互联技术在半导体设计中的革命性作用,从Chiplet到UCIE标准的演进如何重塑行业生态。详细分析了D2D互联的技术本质、架构选择及UCIE标准带来的变革,并展望了未来光学D2D和3D集成等趋势。高速互联接口技术的突破为AI加速器和计算芯片提供了更高带宽和能效。

weixin_29292535的博客 930

自定义注解实现@NotNull注解

先了解一下基本的自定义注解的时候,常用的注解含义 @Documented // 代表这个注解,可以被javadoc 处理的(加不加都行) @Retention(RetentionPolicy.RUNTIME) // RetentionPolicy 生命周期,一共有三个 // SOURCE 只留在源码,编译好后的代码是不有该注解的,该注解一旦编译就不存在了 ; // class 只停留在字节码,...

树欲静而风不止 1万+

基于STM32的智能交通灯管理系统设计

本项目基于STM32微控制器设计了一个智能交通灯管理系统,通过多个传感器模块实现对交通灯的智能化控制。项目涉及硬件电路设计、传感器数据采集和逻辑控制实现,适用于城市交通路口或小区路口。该基于STM32的智能交通灯系统通过超声波传感器实现了流量监测,结合LED和蜂鸣器实现了自动交通信号控制,适用于城市或社区路口。基于STM32CubeMX生成的框架,编写红绿灯切换、流量监测和蜂鸣器控制的代码。以下为主循环,通过不断读取传感器数据,结合交通灯和蜂鸣器模块实现智能交通灯控制。

2401_88410555的博客 2062

Java实现自定义注解

前言      上一篇文章介绍了注解的一些基本知识,这次来介绍下如何实现自定义注解及注解如何使用。 正文      注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。...

全力奔跑,梦在彼岸 10万+

Unity地形数据高效转换:从Terrain到3DMAX的OBJ导出实战

本文详细解析了Unity地形数据无法直接导入3DMAX的原因,并提供了高效转换的实战方案。通过编写自定义编辑器脚本,将Unity Terrain的高度图数据“烘焙”为静态网格模型,并以OBJ格式导出。文章重点讲解了核心代码逻辑、分辨率选择对模型精度的影响,以及在3DMAX中导入和优化模型的实用技巧,旨在打通Unity与3DMAX之间的数据协作壁垒。

sky77的博客 447

EtherCAT用TwinCAT 3跑DC报0x2C或者0x1A错误码

EtherCAT用TwinCAT 3跑DC报0x2C或者0x1A DC报错 ///////////////////////////////////////////////////////////////////////////////////////// /** \brief Checks communication and synchronisation variables and update AL status / AL status code if an error has occurr

PI_sunyang的博客 5304

java 自定义注解_两步实现Java自定义注解

什么是注解?注解就是为容器提供元数据,例如@Controller 注解则是标记了该Bean需要交给Spring容器进行管理。那么我们怎么去实现自个的注解,也就是自定义注解呢?一、自定义一个注解(MyValidate),使用元注解定义各项用途二、定义该注解的业务逻辑,这里只实现了注解的一个属性:isNotNull()然后就就可以愉快的使用了实际项目中通过拦截器或者切面来实现:1、定义一个interf...

weixin_39601794的博客 601

MATLAB从入门到精通-APP调用simulink中的参数,并且修改,将结果返回到APP中

本次案例为以下微分方程: 其中方程的初始值为: Step1:搭建simulink文件,如下图所示: 初始值配置在积分模块中,如下图所示: Step2:制作app 操作视频: ,时长01:11 代码: 本文包括APP如何回调simulik中d的参数,以及把simulink中的仿真结果输出到APP中的绘图界面中。 核心代码如下: ...

wenyusuran的专栏 3040

自定义注解简单实现

package com.learn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // 事务注...

Leon_Jinhai_Sun的博客 347

黑猫带你学eMMC协议第12篇:生产状态感知(PSA)

1 概述 1.1 什么是PSA Production State Awareness (PSA) 生产状态感知 e•MMC设备可以利用其是否在生产环境中的信息,从而在现场运作时进行不同的操作。 例如,在设备低温焊接(soldering)前,将数据写入emmc,可能导致数据出错,而正在焊接期间写入数据,出错的概率可能会更大。在低温焊接之前,emmc设备可以使用一种特定的内部操作去加载内容,这样就能减少数据出错的概率,而在低温焊接后进行常规的操作就行了。 1.2 psa如何进行工作? PSA存在于emmc5.0

黑猫奥利奥的博客 4257

网规第三版:第4章网络资源设备(完结)

第 4 章 网络资源设备 调整内容: 更新主流网络设备(交换机、路由器、防火墙)的技术参数与选型标准 增加国产化网络设备与信创产品的相关内容 精简已淘汰的设备类型与技术指标

鹿鸣天涯 266

实现自定义注解、实现自定义幂等性注解

添加 Spring AOP 依赖。创建自定义注解。创建一个新的 Java 注解类,通过@interface关键字来定义,并可以添加元注解以及属性。@Target(ElementType.METHOD) //表示作用于方法上@Retention(RetentionPolicy.RUNTIME) // 表示这个注解在运行时是可见的,这样 AOP 代理才能在运行时读取到这个注解编写 AOP 拦截(自定义注解)的逻辑代码。@Aspect@Component// 方法执行前的处理。

qq_44721738的博客 1419

YOLOv11 快速入门指南 | 10分钟吃透网络结构与新特性

2024 年 9 月 30 日,Ultralytics 发布了 YOLOv11,这是继 YOLOv8、v9、v10 之后的最新一代实时目标检测模型。 与前几代相比,YOLOv11 在保持“单阶段、实时、端到端”三大基因的同时,带来了两大核心升级:一句话总结:YOLOv11 = 更快 + 更准 + 更少参数。 2.2 微观单元:C3k2 与 C2PSA 2.2.1 C3k2 模块 作用:替换 YOLOv8 的 C2f,做跨阶段局部特征融合。 核心代码(ultralytics/nn/modules/block

shrgegrb的博客 1407

SpringBoot基于AOP实现自定义注解

今天写的这个博客是用于,在Spring项目中如何实现自定义注解。 现在我的项目中需要在API工程中记录用户的行为日志。由于行为日志中有行为描述等等的对于每一个接口不同的数据。有两种实现方法: 第一种就是写一个公共方法,然后在每个Controller中手动传参调用,这样冗余代码比较多,而且现在接口都完成了,要每个接口加这样的代码,会很烦。 第二种就是实现在方法上注解。这就需要我们实现自己的自定

落尘 9260

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java注解详解与自定义注解的实现

       注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 1、java注解的优缺点       注解本质上通过反射来实现的,我们都知道,反射是一种程序的自省机制,其实反射是破坏封装的一种方式,反射的效率很低的,对...

hj12312的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

注解anoation原理及自定义注解demo实现

在接触ssh框架的时候,我们都会看到框架对注解的广泛使用,如@Resource,@autowired,@component ,@controller等等,一开始的时候我们接触这些注解的时候都会有 较大的疑虑,依照“知道源码知道一切”的思维我们肯定回去看这些源码,但是在观察源码之前,我们应该首先了解注解的实现原理,现在我们就实现一个自定义注解来进行探索。 注解的自定义 在Java 5中给出了4

jack_wang001的专栏 1494

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java自定义注解怎么实现注解_如何实现自定义注解

展开全部首先,e5a48de588b662616964757a686964616f31333363386133定义一个注解:packagecom.guxiang.test;importjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retent...

weixin_29094539的博客 492

java注解-自定义注解的实现

注解浅解

胡云峰的博客 4722

自定义注解实现

<!-- 添加aop支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.5.6</version> </dependency> 新建 annotation文件 @Documented @Rete.

q1424966670的博客 822
上一篇: Swagger3.0.0实战
下一篇: JWT授权为啥要在 Authorization标头里加个Bearer 呢
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白de成长之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值