使用场景

前提场景

我们多个系统同时继承了某一个通用系统,通用系统的接口是不会允许随意改变的,其他子系统都依赖于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. 7.1 套接字(socket)

    套接字(socket)是计算机之间进行通信的一种技术,它允许不同主机上的进程之间进行数据交换.在Python中,我们可以使用socket模块来创建和使用套接字. 首先,我们需要导入socket模块: ...

  2. 【保姆级教程】Vue项目调试技巧

    前言 在Vue项目开发过程中,当遇到应用逻辑出现错误,但又无法准确定位的时候,知晓Vue项目调试技巧至关重要,debug是必备技能. 同后台项目开发一样,可以在JS实现的应用逻辑中设置断点,并进行单步 ...

  3. 性能_3 jmeter连接数据库jdbc(sql server举例)

    一.下载第三方工具包驱动数据库 1. 因为JMeter本身没有提供链接数据库的功能,所以我们需要借助第三方的工具包来实现.  (有这个jar包之后,jmeter可以发起jdbc请求,没有这个jar包, ...

  4. .NET 7 新特性全面解析

    在 2021 年 11 月 8 日发布的 .NET 6 当前已经广泛使用.微软团队已经开始着手为.NET 7制定计划和新特性.本文将为您全面解析.NET 7 的新特性,并提供源代码示例. 1. 更好的 ...

  5. fdisk 命令 创建分区 实现扩容

    fdisk 命令 创建分区 实现扩容 Linux fdisk命令简介 Linux fdisk 是一个创建和维护分区表的程序,它兼容 DOS 类型的分区表.BSD 或者 SUN 类型的磁盘列表. 菜单操 ...

  6. 华为P9黑屏的解决方案-更换屏幕

    解决办法(系统软件) 1.回退系统版本,b198或者b139固件. 2.升级版本,到最新版本.新版本使用时并没有发现这个问题. 解决方法(系统设置) 点开设置-电池-选择进入超级省电模式,然后退出超级 ...

  7. Mysql基础6-常用数据库函数

    一.字符串函数 1.常见Mysql内置字符串函数 concat(s1,s2,s3,...):字符串拼接,将s1,s2,s3...等拼接成一个字符串 lower(str):将字符串str全部转为小写 u ...

  8. C++之函数的分文件编写

    从黑马程序员的c++课里学到的函数的分文件编写 函数的分文件编写 作用:让代码结构更加清晰 函数分文件编写一般有4个步骤 1,创建后缀名为.h的头文件 2,创建后缀名为.cpp的源文件 3,在头文件中 ...

  9. 烧死10亿脑细胞的SQL长啥样?

    1 前言 今天在生产中碰到了一个让我十分费解的 SQL,十分有趣. 2 现象 SQL 很好复现,就是逻辑看起来有点唬人 postgres=# create table test(id1 int,id2 ...

  10. MariaDB start 报错:mysql-bin.index' not found (Errcode: 2) (Errcode: 13)

    问题是修改配置log-bin=/data/mysql/binlog/mysql-bin后出现的. 报错:Errcode: 2 mkdir -p /data/mysql/binlog ## 和正常的DB ...