501. Java 反射 - 使用注解与接口设计拦截器
文章目录501. Java 反射 - 使用注解与接口设计拦截器1. 为什么要定义拦截器接口接口定义2. 定义拦截注解3. 编写业务服务类4. 编写一个拦截器实现类5. 设计一个 ServiceFactory 来统一调用6. 测试拦截功能7. 总结501. Java 反射 - 使用注解与接口设计拦截器1. 为什么要定义拦截器接口我们希望在调用某个方法前后插入自定义逻辑如日志、安全校验、数据转换等。为了让这个机制通用化我们定义一个拦截器接口所有拦截器都必须实现它。接口定义publicinterfaceInterceptorT,R{Rintercept(TinterceptedObject,Methodmethod,Object...arguments);}T interceptedObject→ 被拦截的对象例如一个 Service 实例。Method method→ 被拦截的方法。Object... arguments→ 方法调用时传入的参数。R→ 方法的返回值类型。 使用泛型保证了接口的灵活性既能拦截返回String的方法也能拦截返回User的方法。2. 定义拦截注解我们需要一个注解来标记哪些方法需要被拦截以及指定使用哪个拦截器。Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)publicinterfaceIntercept{Class?extendsInterceptor?,?value();}Target(ElementType.METHOD)→ 注解只能放在方法上。Retention(RetentionPolicy.RUNTIME)→ 在运行时依然保留供反射使用。value()→ 指定具体的拦截器类。3. 编写业务服务类publicclassSomeInterceptedService{Intercept(MessageInterceptor.class)publicStringmessage(Stringinput){returninput.toUpperCase();}}方法message()被Intercept标记。拦截器类MessageInterceptor将会替代message()的直接执行。4. 编写一个拦截器实现类我们来实现一个简单的拦截器它会在调用message()前后打印日志。publicclassMessageInterceptorimplementsInterceptorSomeInterceptedService,String{OverridepublicStringintercept(SomeInterceptedServiceservice,Methodmethod,Object...arguments){System.out.println( Before invoking method.getName());try{// 真实调用被拦截的方法Stringresult(String)method.invoke(service,arguments);System.out.println( After invoking, result result);returnresult;}catch(Exceptione){thrownewRuntimeException(Interceptor caught exception,e);}}}运行逻辑在方法执行前打印日志。执行目标方法 (method.invoke)。在方法执行后打印返回值。5. 设计一个 ServiceFactory 来统一调用我们需要一个工厂类ServiceFactory来读取注解并执行拦截逻辑。publicclassServiceFactory{SuppressWarnings(unchecked)publicstaticTObjectinvoke(ClassTserviceClass,StringmethodName,Object...args)throwsException{TserviceserviceClass.getDeclaredConstructor().newInstance();MethodmethodserviceClass.getMethod(methodName,String.class);if(method.isAnnotationPresent(Intercept.class)){InterceptinterceptAnnotationmethod.getAnnotation(Intercept.class);Class?extendsInterceptor?,?interceptorClassinterceptAnnotation.value();InterceptorT,?interceptor(InterceptorT,?)interceptorClass.getDeclaredConstructor().newInstance();returninterceptor.intercept(service,method,args);}else{returnmethod.invoke(service,args);}}} 流程通过反射创建服务实例。找到方法并检查是否有Intercept。如果有执行对应的拦截器逻辑。如果没有直接调用原始方法。6. 测试拦截功能publicclassMain{publicstaticvoidmain(String[]args)throwsException{Stringoutput(String)ServiceFactory.invoke(SomeInterceptedService.class,message,Hello);System.out.println(Final output output);}}运行结果Beforeinvoking message Afterinvoking,resultHELLOFinaloutputHELLO7. 总结InterceptorT, R定义了拦截器的通用接口。Intercept注解用来声明哪些方法需要拦截以及由哪个拦截器处理。业务类通过注解与拦截器解耦不需要手动调用拦截器。ServiceFactory承担了框架的角色把注解与拦截器绑定在一起。

相关新闻

如何使用 BatFi 设置 Mac 电池充电上限:80% 即停的快速指南

如何使用 BatFi 设置 Mac 电池充电上限:80% 即停的快速指南

如何使用 BatFi 设置 Mac 电池充电上限:80% 即停的快速指南 【免费下载链接】BatFi Battery charging limiter for macOS. 项目地址: https://gitcode.com/gh_mirrors/ba/BatFi 如果你的 MacBook 几乎整天插着电——桌面办公、固定外接显示器——电池会长期处…

2026/8/22 22:23:00 阅读更多 →
NGA论坛增强脚本 NGA-BBS-Script:浏览体验提升完整指南

NGA论坛增强脚本 NGA-BBS-Script:浏览体验提升完整指南

NGA论坛增强脚本 NGA-BBS-Script:浏览体验提升完整指南 【免费下载链接】NGA-BBS-Script NGA论坛增强脚本,给你完全不一样的浏览体验 项目地址: https://gitcode.com/gh_mirrors/ng/NGA-BBS-Script NGA-BBS-Script 是一款免费开源的 NGA 论坛增强…

2026/8/22 22:23:00 阅读更多 →
QQ空间历史说说如何完整找回?GetQzonehistory 一次导出 6 份 Excel 加网页版

QQ空间历史说说如何完整找回?GetQzonehistory 一次导出 6 份 Excel 加网页版

QQ空间历史说说如何完整找回?GetQzonehistory 一次导出 6 份 Excel 加网页版 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory GetQzonehistory 是一个 Python 工具&#xff0…

2026/8/24 18:37:08 阅读更多 →

最新新闻

MMD Tools Blender 插件完整指南:如何导入导出 MMD 模型与 vmd 动作

MMD Tools Blender 插件完整指南:如何导入导出 MMD 模型与 vmd 动作

MMD Tools Blender 插件完整指南:如何导入导出 MMD 模型与 vmd 动作 【免费下载链接】blender_mmd_tools MMD Tools is a Blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd…

2026/8/24 18:53:35 阅读更多 →
开源模型与前沿技术实战:从环境搭建到生产部署的工程化指南

开源模型与前沿技术实战:从环境搭建到生产部署的工程化指南

1. 先搞清楚“开源”和“前沿模型”到底在解决什么问题当你在 DataCamp 这类数据科学学习平台,或者任何一个技术社区,看到“开源”和“前沿模型”这两个词被放在一起讨论时,核心问题其实就一个:我应该用现成的开源方案快速落地&am…

2026/8/24 18:53:35 阅读更多 →
MoE架构解析:稀疏激活如何实现万亿参数模型的高效推理

MoE架构解析:稀疏激活如何实现万亿参数模型的高效推理

1. 项目概述:从“激活率”的迷思到MoE的效率革命 最近在AI圈子里,关于K3模型和其极低的专家激活率(比如标题里提到的1.8%)讨论得挺热。乍一看,一个拥有896个专家的庞大模型,每次推理只动用其中不到2%的部分…

2026/8/24 18:53:34 阅读更多 →
Java面试必问的10个核心问题深度解析

Java面试必问的10个核心问题深度解析

1. 项目概述作为一名拥有8年Java开发经验的工程师,我经常参与技术面试工作。在数百场面试中,我发现某些Java问题几乎成为必考题。这些问题看似基础,却能精准考察候选人的技术深度和实战经验。本文将分享我认为最具代表性的10个Java面试问题&a…

2026/8/24 18:53:34 阅读更多 →
智谱开源盾计划:共建AI安全新范式

智谱开源盾计划:共建AI安全新范式

智谱AI的“开源的盾”计划是一项聚焦于大模型网络安全能力提升与开源生态安全治理的专项计划。该计划的核心是通过开源协作的方式,对智谱自研的GLM系列大模型进行安全审计与加固,以构建更可靠的AI安全防线。 计划核心内容 维度具体内容核心目标提升GLM…

2026/8/24 18:53:34 阅读更多 →
SpringBoot+Vue构建智能校园招聘系统实战

SpringBoot+Vue构建智能校园招聘系统实战

1. 项目背景与核心价值最近在整理校招季的简历投递数据时,发现一个有趣的现象:超过60%的应届生会同时使用3个以上的招聘平台,但仍有近40%表示找不到匹配岗位。这让我意识到,传统招聘平台在校园场景存在明显的供需匹配断层。于是花…

2026/8/24 18:52:34 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →