1. SQL 同步最新
2. 优化 trace 相关的逻辑
This commit is contained in:
@@ -12,7 +12,7 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysMenuMapper;
|
||||
import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum;
|
||||
import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysMenuProducer;
|
||||
import cn.iocoder.dashboard.modules.system.service.permission.impl.SysMenuServiceImpl;
|
||||
import cn.iocoder.dashboard.util.AopTargetUtils;
|
||||
import cn.iocoder.dashboard.util.sping.SpringAopUtils;
|
||||
import cn.iocoder.dashboard.util.RandomUtils;
|
||||
import cn.iocoder.dashboard.util.object.ObjectUtils;
|
||||
import com.google.common.collect.Multimap;
|
||||
@@ -57,7 +57,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
|
||||
sysMenuService.initLocalCache();
|
||||
|
||||
// 获取代理对象
|
||||
SysMenuServiceImpl target = (SysMenuServiceImpl) AopTargetUtils.getTarget(sysMenuService);
|
||||
SysMenuServiceImpl target = (SysMenuServiceImpl) SpringAopUtils.getTarget(sysMenuService);
|
||||
|
||||
Map<Long, SysMenuDO> menuCache =
|
||||
(Map<Long, SysMenuDO>) BeanUtil.getFieldValue(target, "menuCache");
|
||||
@@ -227,7 +227,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
|
||||
public void testListMenusFromCache_success() throws Exception {
|
||||
Map<Long, SysMenuDO> mockCacheMap = new HashMap<>();
|
||||
//获取代理对象
|
||||
SysMenuServiceImpl target = (SysMenuServiceImpl) AopTargetUtils.getTarget(sysMenuService);
|
||||
SysMenuServiceImpl target = (SysMenuServiceImpl) SpringAopUtils.getTarget(sysMenuService);
|
||||
BeanUtil.setFieldValue(target, "menuCache", mockCacheMap);
|
||||
|
||||
Map<Long, SysMenuDO> idMenuMap = new HashMap<>();
|
||||
@@ -256,7 +256,7 @@ public class SysMenuServiceTest extends BaseDbUnitTest {
|
||||
public void testListMenusFromCache2_success() throws Exception {
|
||||
Map<Long, SysMenuDO> mockCacheMap = new HashMap<>();
|
||||
//获取代理对象
|
||||
SysMenuServiceImpl target = (SysMenuServiceImpl) AopTargetUtils.getTarget(sysMenuService);
|
||||
SysMenuServiceImpl target = (SysMenuServiceImpl) SpringAopUtils.getTarget(sysMenuService);
|
||||
BeanUtil.setFieldValue(target, "menuCache", mockCacheMap);
|
||||
|
||||
Map<Long, SysMenuDO> idMenuMap = new HashMap<>();
|
||||
|
||||
@@ -13,14 +13,8 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.permission.SysRoleMapper;
|
||||
import cn.iocoder.dashboard.modules.system.enums.permission.SysRoleTypeEnum;
|
||||
import cn.iocoder.dashboard.modules.system.mq.producer.permission.SysRoleProducer;
|
||||
import cn.iocoder.dashboard.modules.system.service.permission.impl.SysRoleServiceImpl;
|
||||
import cn.iocoder.dashboard.util.AopTargetUtils;
|
||||
import cn.iocoder.dashboard.util.AssertUtils;
|
||||
import cn.iocoder.dashboard.util.RandomUtils;
|
||||
import cn.iocoder.dashboard.util.object.ObjectUtils;
|
||||
import com.google.common.collect.Sets;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import cn.iocoder.dashboard.util.sping.SpringAopUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
@@ -63,7 +57,7 @@ public class SysRoleServiceTest extends BaseDbUnitTest {
|
||||
|
||||
//断言
|
||||
//获取代理对象
|
||||
SysRoleServiceImpl target = (SysRoleServiceImpl) AopTargetUtils.getTarget(sysRoleService);
|
||||
SysRoleServiceImpl target = (SysRoleServiceImpl) SpringAopUtils.getTarget(sysRoleService);
|
||||
|
||||
Map<Long, SysRoleDO> roleCache = (Map<Long, SysRoleDO>) BeanUtil.getFieldValue(target, "roleCache");
|
||||
assertPojoEquals(roleDO1, roleCache.get(roleDO1.getId()));
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
package cn.iocoder.dashboard.util;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import org.springframework.aop.framework.AdvisedSupport;
|
||||
import org.springframework.aop.framework.AopProxy;
|
||||
import org.springframework.aop.support.AopUtils;
|
||||
|
||||
/**
|
||||
* Spring AOP 工具类
|
||||
*
|
||||
* 参考波克尔 http://www.bubuko.com/infodetail-3471885.html 实现
|
||||
*/
|
||||
public class AopTargetUtils {
|
||||
|
||||
/**
|
||||
* 获取代理的目标对象
|
||||
*
|
||||
* @param proxy 代理对象
|
||||
* @return 目标对象
|
||||
*/
|
||||
public static Object getTarget(Object proxy) throws Exception {
|
||||
// 不是代理对象
|
||||
if (!AopUtils.isAopProxy(proxy)) {
|
||||
return proxy;
|
||||
}
|
||||
// Jdk 代理
|
||||
if (AopUtils.isJdkDynamicProxy(proxy)) {
|
||||
return getJdkDynamicProxyTargetObject(proxy);
|
||||
}
|
||||
// Cglib 代理
|
||||
return getCglibProxyTargetObject(proxy);
|
||||
}
|
||||
|
||||
private static Object getCglibProxyTargetObject(Object proxy) throws Exception {
|
||||
Object dynamicAdvisedInterceptor = BeanUtil.getFieldValue(proxy, "CGLIB$CALLBACK_0");
|
||||
AdvisedSupport advisedSupport = (AdvisedSupport) BeanUtil.getFieldValue(dynamicAdvisedInterceptor, "advised");
|
||||
return advisedSupport.getTargetSource().getTarget();
|
||||
}
|
||||
|
||||
private static Object getJdkDynamicProxyTargetObject(Object proxy) throws Exception {
|
||||
AopProxy aopProxy = (AopProxy) BeanUtil.getFieldValue(proxy, "h");
|
||||
AdvisedSupport advisedSupport = (AdvisedSupport) BeanUtil.getFieldValue(aopProxy, "advised");
|
||||
return advisedSupport.getTargetSource().getTarget();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user