我正在尝试用自己的值替换 System.currentTimeMillis() 。测试用例需要它。 代码示例:
package org.example.aspectj;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class TimeAspect
{
@Around("execution(public static native long currentTimeMillis())")
public long changeCallsToCurrentTimeInMillisMethod(ProceedingJoinPoint pjp)
{
return 0;
}
}
package org.example.aspectj;
public class TimeDemo
{
public static void main(String[] args) {
long currentTimeMillis = System.currentTimeMillis();
System.out.println("currentTimeMillis -> " + currentTimeMillis);
}
}
[warning] advice defined in org.example.aspectj.TimeAspect has not been applied [Xlint:adviceDidNotMatch]
看答案:
Task :TimeDemo.main()
currentTimeMillis -> 1710770641050
所以时间没有改变。 怎么了?
您无法通过常规方式将方面编织到 JDK 类中,并且我不会在这里详细说明 JDK 编织的高级用例。
简单的解决方案是将方面编织到应用程序代码中,因为这是您在编译期间控制的内容。只需使用
call
而不是 execution
即可编织到 calling 代码而不是 scribed 代码中。
@Around("call(public static native long currentTimeMillis())")
更改后控制台日志:
currentTimeMillis -> 0