使用场景

前提场景

我们多个系统同时继承了某一个通用系统,通用系统的接口是不会允许随意改变的,其他子系统都依赖于Base系统的通用接口

目标需求场景

但是有一个业务,需要给某一个公共接口增加子系统独有的业务功能;比如某个接口完成之后会往其他的业务修改状态

解决方案

通常使用做法-01 集成BaseController的接口,从写这个业务代码,然后覆盖掉原有通用接口的业务

通常使用做法-02 spring的最重要的核心特性之一---AOP切面增强

推荐使用AOP技术增强。

实现代码 --使用返回通知


/**
* 动态增强BaseController的接口代码
*/
@Aspect
@Component
public class NioTaskInfoControllerAdvice { Logger logger = LoggerFactory.getLogger(NioTaskInfoControllerAdvice.class.getSimpleName()); private String msgStartSuffix = "申请号:"; @Autowired
private FeeInfoService feeInfoService; //标识切入点的特征
@Pointcut(value = "execution(* com.XX.XX.XX.interfaces.XXXController.finish(..))")
public void pointCut() { } /**
* XX完成拓展--BB需要自动生成费用确认台账
* 返回通知(@AfterReturning):当被增强的方法 成功执行之后调用通知
*/
@AfterReturning(value = "pointCut()", returning = "result")
public void afterReturning(JoinPoint joinPoint, Object result) {
logger.info("XX完成接口增强---成功执行之后调用返回通知通知织入增强业务逻辑");
try {
if (result instanceof Result) {
if (((Result<?>) result).isSuccess()) {
logger.info("回调状态---->XX已完成----->准备生成BB确认台账");
} else {
logger.info("回调状态---->XX未完成....");
}
}
} catch (Exception e) {
e.printStackTrace();
logger.error("XX完成---->BB确认自动生成台账织入失败....");
}
}
}

额外还发现一个BUG Mybatis的动态SQL的if标签对于Integer数据类型为0的判断

平时我们的判空代码直接是抄过来的

<if test="status!= null  and status!= ''">
status=#{status},
</if>
  • 在这段代码中传入0,如果传入的0是String类型的话是不会有问题的
  • 但是如果传入的0是Integer类型的,Integer的0会被mybatis认为是空的字符

解决方案


<if test="status!= null>
status=#{status},
</if>

JAVA动态增强一个BaseController的已经存在的接口的更多相关文章

  1. Java中增强一个类的几种方法

    今天有人问我怎么增强一个类的功能.博客刚好没东西,今天就讲讲增强类. 增强的手段有三种类型: 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但 ...

  2. java动态代理--一个简单的例子

    这几天看视频看到了java的动态代理,这里写一个小例子.在写例子的时候发现:认为自己会了,和能写出来真不是一个概念.还是要多写代码,然后写博客再深入一些,费曼学习法--教,是最好的学. 1.什么是动态 ...

  3. java动态返回一个大对象里多个小对象map返回,el表达式用c:set拼接

    基于堆内存,先把map放到返回值里 Map _map=new HashMap(); modelAndView.addObject("pledgeInsurance",_map);/ ...

  4. 大厂高级工程师面试必问系列:Java动态代理机制和实现原理详解

    代理模式 Java动态代理运用了设计模式中常用的代理模式 代理模式: 目的就是为其他对象提供一个代理用来控制对某个真实对象的访问 代理类的作用: 为委托类预处理消息 过滤消息并转发消息 进行消息被委托 ...

  5. Java动态代理:一个面包店的动态代理帝国

    文章首发于[博客园-陈树义],点击跳转到原文大白话说Java动态代理:一个面包店的动态代理帝国 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中, ...

  6. Java 动态代理作用是什么?

    Java 动态代理作用是什么?   1 条评论 分享   默认排序按时间排序 19 个回答 133赞同反对,不会显示你的姓名 Intopass 程序员,近期沉迷于动漫ING 133 人赞同 ① 首先你 ...

  7. Java动态代理与Cglib库

    JDK动态代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在 ...

  8. Proxy Pattern(Java动态代理和cglib的实现)

    代理模式:给某一个对象提供代理对象,由代理对象控制具体对象的引用. 代理,指的就是一个角色对表另一个角色采取行动,就生活中,一个红酒厂商,是不会直接把红酒零销给客户的,都是通过代理完成他的销售业务.而 ...

  9. java动态代理浅析

    最近在公司看到了mybatis与spring整合中MapperScannerConfigurer的使用,该类通过反向代理自动生成基于接口的动态代理类. 于是想起了java的动态代理,然后就有了这篇文章 ...

  10. [转]java动态代理(JDK和cglib)

    转自:http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html java动态代理(JDK和cglib) JAVA的动态代理 代理模式 代理 ...

随机推荐

  1. Quartz + SpringBoot 实现定时任务(多任务,多执行时间)代码模板(直接CV即可)

    一,什么是Quartz quartz 是一款开源且丰富特性的Java 任务调度库,用于实现任务调度和定时任务.它支持各种任务类型和灵活的配置选项,具备作业持久化.集群和分布式调度.错误处理和重试机制等 ...

  2. Python生成指定大小的文件

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/400bd75c.html 你好,我是测试蔡坨坨. 在日常测试工作中,我们经常需要对上传的文件大小进行测试,例如:一个文件上传 ...

  3. 一张图快速了解 Istio 的 EnvoyFilter

    EnvoyFilter简介 EnvoyFilter 提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置.使用 EnvoyFilter 修改某些字段的值,添加特定的过滤器,甚至添加全 ...

  4. 一个跨平台的`ChatGPT`悬浮窗工具

    一个跨平台的ChatGPT悬浮窗工具 使用avalonia实现的ChatGPT的工具,设计成悬浮窗,并且支持插件. 如何实现悬浮窗? 在使用avalonia实现悬浮窗也是非常的简单的. 实现我们需要将 ...

  5. 谷歌语法的基础知识&FOFA

    谷歌语法 谷歌语法基础符号: "xxx":表示完全匹配,即关键字不能分开,顺序也不能变 +:"xxx"+www.baidu.com  搜索xxx与baidu.c ...

  6. P5752 [NOI1999] 棋盘分割题解

    本文来自我的洛谷博客. 这个题解思路虽然与其他人的思路相同, 但力求使用清晰易懂的图片和文字,讲解最简洁的道理. 请大家耐心地看完,注意要结合图片一起哦~~ 2022-8-24 更改了格式与错别字. ...

  7. 【阅读笔记】低照度图像增强-《Adaptive and integrated neighborhood-dependent approach for nonlinear enhancement of

    本文介绍改进INDANE算法的低照度图像增强改进算法(AINDANE算法),<Adaptive and integrated neighborhood-dependent approach fo ...

  8. Codeforces Round #881 (Div. 3) A-F

    比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; int a[57]; bool ...

  9. Redis的设计与实现-总结

    个人真的很喜欢这本书, 从对C语言一窍不通, 到发现C语言竟然如此简洁, 以至于我喜欢上了C! 对此前面的底层数据结构也读了几次, 大致整理了书里的内容, 后面的就粗略看了一下, 不再细细整理了. R ...

  10. .NET ORM 鉴别器 和 TDengine 使用 -SqlSugar

    SqlSugar ORM SqlSugar 是一款 老牌 .NET 开源多库架构ORM框架 ,一套代码能支持多种数据库像像Admin.net.Blog.Core.CoreShop等知名开源项目都采用了 ...