AspectJ:建议不适用于数组类型 简单复制

问题描述

我根据切入点定义了一个切入点,该切入点在编译方面时不可用,但在编译代码时可用。
当我使用简单类型时,它工作正常,但是当我使用数组时,效果不佳。

看起来该类型已被展平并视为非数组类型(未应用于数组类型和未应用于非数组类型,与预期的恰好相反)。

简单复制

方面:

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 (将#修改为@)