主题:AOP怎么拦截DAO层

fswilsom 2020年03月28日 80

想对DAO层做个拦截,用于记录表级的操作情况。想取到具体执行的类名、方法啊名、参数 ( SysUserDao.all ),有什么 好办法吗 ?

做了几个处理

1:定义个baseDAO,子类继承这个Dao。调用  默认的 Mapper.all() 方法,也尝试过,自己定义sql文件,里面有 all() 方法。

 image.png

image.png

2:新增拦截器,获取不了拦截的目标对象信息。

image.png

image.png

闲大赋 2020年03月28日

可以渠道,从beetlsql角度,你可以实现
MapperJavaProxy的一个子类,然后invoke方法你可以重写,因为这个有定义

public Object invoke(Object proxy, Method method, Object[] args) 

为了代替Beetlsql的MapperJavaProxy,你可以调用SQLManager.setMapperBuilder方法,提供你自己的mapper实现(重新实现buildInstance方法),这样就可以获取你需要的参数了

比如

MyDefaultMapperBuilder builder = ....
sqlManager.setMapperBuilder(builder);

这行,当你的业务调用mapper的时候都会执行MapperJavaProxy的一个子列

fswilsom 2020年03月31日

谢谢兄弟。群里面熊红底提的另一个思路,参考 debug拦截器,也能实现