ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

502. Java 反射 - 编写 MessageInterceptor 类

502. Java 反射 - 编写 MessageInterceptor 类 文章目录502. Java 反射 - 编写 MessageInterceptor 类1. 设计思路2. MessageInterceptor 实现3. 示例讲解原始服务类测试调用输出结果4. 总结502. Java 反射 - 编写 MessageInterceptor 类1. 设计思路拦截器的目标是在调用目标方法前→ 校验或修改参数。调用目标方法→ 执行实际的业务逻辑。在调用目标方法后→ 处理返回值或执行额外逻辑。在这个例子中我们希望拦截SomeInterceptedService.message()方法并且检查参数是否合法非空、非空字符串。调用原始方法获取结果。在结果末尾加上 [was intercepted]来表明它被拦截过。2. MessageInterceptor 实现publicclassMessageInterceptorimplementsInterceptorSomeInterceptedService,String{OverridepublicStringintercept(SomeInterceptedServiceservice,MethodinterceptedMethod,Object...arguments){try{if(arguments.length1){// ✅ 1. 参数校验Stringinput(String)arguments[0];Objects.requireNonNull(input,Input is null);if(input.isEmpty()){thrownewIllegalArgumentException(Input is empty);}// ✅ 2. 调用目标方法Stringresult(String)interceptedMethod.invoke(service,arguments);// ✅ 3. 修改返回值returnresult [was intercepted];}}catch(IllegalAccessException|InvocationTargetExceptione){thrownewRuntimeException(Error invoking method reflectively,e);}thrownewIllegalArgumentException(Arguments should contain exactly one argument of type String);}}3. 示例讲解原始服务类publicclassSomeInterceptedService{Intercept(MessageInterceptor.class)publicStringmessage(Stringinput){returninput.toUpperCase();}}测试调用publicclassMain{publicstaticvoidmain(String[]args)throwsException{Stringoutput(String)ServiceFactory.invoke(SomeInterceptedService.class,message,hello);System.out.println(Final output output);}}输出结果FinaloutputHELLO[was intercepted]4. 总结参数校验如果传入null或空字符串会抛出异常阻止目标方法的执行。拦截逻辑我们在调用message()前后加入了额外逻辑参数校验 结果追加说明。反射调用通过interceptedMethod.invoke(service, arguments)来执行实际的业务方法。增强返回值返回值被拦截器修改增加了 [was intercepted]。
返回列表