问题描述
我根据切入点定义了一个切入点,该切入点在编译方面时不可用,但在编译代码时可用。
当我使用简单类型时,它工作正常,但是当我使用数组时,效果不佳。
看起来该类型已被展平并视为非数组类型(未应用于数组类型和未应用于非数组类型,与预期的恰好相反)。
简单复制
方面:
public aspect Aspect {
after() : call(public MaybeMissingClass MaybeMissingClass.*())
{
System.out.println("Aspect: MaybeMissingClass 1");
}
after() : call(public MaybeMissingClass[] MaybeMissingClass.*())
{
System.out.println("Aspect: MaybeMissingClass[] 2");
}
}
班级:
// compile all together
// java -cp aspectjtools.jar;aspectjrt.jar org.aspectj.tools.ajc.Main -source 1.6 Aspect.aj Main.java
// compile aspect without concrete class in CP and then compile class
// java -cp aspectjtools.jar;aspectjrt.jar org.aspectj.tools.ajc.Main -source 1.6 Aspect.aj
// java -cp aspectjtools.jar;aspectjrt.jar org.aspectj.tools.ajc.Main -source 1.6 -aspectpath . Main.java
// run
// java -cp .;aspectjtools.jar;aspectjrt.jar Main
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("hello from main");
MaybeMissingClass.f1();
MaybeMissingClass.f2();
}
}
class MaybeMissingClass {
public static MaybeMissingClass f1(){System.out.println("hello from MaybeMissingClass.f1");return null;}
public static MaybeMissingClass[] f2(){System.out.println("hello from MaybeMissingClass.f2");return null;}
}
一起编译时的输出:
hello from main
hello from MaybeMissingClass.f1
Aspect: MaybeMissingClass 1
hello from MaybeMissingClass.f2
Aspect: MaybeMissingClass[] 2
分别编译方面时的输出:
hello from main
hello from MaybeMissingClass.f1
Aspect: MaybeMissingClass 1
Aspect: MaybeMissingClass[] 2
hello from MaybeMissingClass.f2
有人可以解释吗?
修改
似乎在调用resolveBindingsForMissingType()
而不是resolveBindingsForExactType()
时丢失了尺寸信息。
但这没有任何意义。此信息可在Aspect-Compile时和weave时使用,那么为什么要丢弃它?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)