【发布时间】:2014-07-21 14:46:53
【问题描述】:
当我使用 proguard 混淆我的代码时,我的方面类有问题。
我有一个方面可以检测带有@Cacheable 注释的所有方法。
这是一个包含@Cacheable 注解的示例类
package com.mycompany.user;
public class User {
@Cacheable(scope="session", uniqueName="userInfo")
public UserInfo getUserInfo(Long userId) {
...
}
}
这是我的方面代码:
@Aspect
public class CacheMethodResultAspect {
@Around(
value = "execution(@com.mycompany.cache.Cacheable * *.*(..))",
argNames = "proceedingJoinPoint,joinPointStaticPart"
)
public Object retrieveResultFromCache(ProceedingJoinPoint proceedingJoinPoint, JoinPoint.StaticPart joinPointStaticPart)
throws Throwable {
final CacheScope cacheScope = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod().getAnnotation(Cacheable.class).scope();
final CacheConstants uniqueName = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod().getAnnotation(Cacheable.class).uniqueName();
final String methodLine = proceedingJoinPoint.getSignature().getDeclaringTypeName() + "." + proceedingJoinPoint.getSignature().getName()
+ "@" + joinPointStaticPart.getSourceLocation().getLine();
.
.
.
}
}
当我记录progressingJoinPoint 的结果时,它返回以下行:
execution(UserInfo java.lang.ClassNotFoundException.getUserInfo())
我希望它返回这个结果:
execution(UserInfo com.mycompany.user.getUserInfo())
它只检测方法名!所以我无法获取此方法的 @Cacheable 注释!
我不想使用:
-keep class myClassName...
aspectj 版本:1.6.12
java版本:1.7更新21
proguard 版本:4.9
我们将不胜感激。
【问题讨论】:
-
我想帮忙,因为我知道 ProGuard 和 AspectJ,但是你的问题是如此的不清楚和自相矛盾,以至于我无法理解你的问题。请编辑问题并更准确地解释。如果你的英语太差,没问题:让代码说话,向我们展示更多代码。
-
对不起。我编辑了我的问题:)
-
您的 ProGuard 配置丢失。无论如何,我会调查您的问题,但只是附带说明:请使用更新版本的 AspectJ。 1.6.12 版于 2011 年发布,您已经错过了几个从那时到今天的改进和错误修复的版本。当前版本是 1.8.0。
-
我将我的 aspectj 更新到 1.8.0 但没有任何改变:(
-
我没有说升级 AspectJ 后会有什么改变,只是你使用了过时的库。顺便说一句,Java 和 ProGuard 版本也不是最新的。我仍然希望看到您的 ProGuard 配置。您是使用 proguard.conf 还是使用 Maven 插件手动构建?
标签: java proguard aspectj obfuscation