AspectJ不是爲查找類而設計的。你最好的選擇是掃描類路徑並使用反射。
如果您可以接受編譯時信息,Eclipse AJDT插件爲所有AspectJ建議提供了良好的圖形信息。
但是,如果您可以忍受一些限制,您可以找到AspectJ建議的所有對象的類。
打印出用於實現MatchRule類的所有對象的類名:A液
@Aspect
public class FindSubClassesAspect {
@Pointcut("execution(demo.MatchRule+.new(..))")
public void demoPointcut() {
}
@After("demoPointcut()")
public void afterDemoPointcut(
JoinPoint joinPoint) {
FindSubClasses.addMatchRuleImplememtation(
joinPoint.getTarget().getClass().getSimpleName());
}
}
包含所有的MatchRule實現信息類:
public enum FindSubClasses {
;
private static Set<String> matchRuleImplementations =
new HashSet<String>();
public static void addMatchRuleImplememtation(String className) {
matchRuleImplementations.add(className);
}
public static Collection<String> getMatchRuleImplementations() {
return matchRuleImplementations;
}
}
一個簡單的驅動程序證明該方面工作:
public class Driver {
public static void main(String[] args) {
new DefaultMatchRule();
new CustomMatchRule();
Collection<String> matchRuleImplementations =
FindSubClasses.getMatchRuleImplementations();
System.out.print("Clases that implements MatchRule: ");
for (String className : matchRuleImplementations) {
System.out.print(className + ", ");
}
}
}
執行此驅動器的輸出:
Clases實現MatchRule:DefaultMatchRule,CustomMatchRule,
我希望這有助於!
你能解釋一下爲什麼你需要這樣的清單嗎?除了分析代碼外,我無法想象這樣的理由。在所有其他情況下,您可以在使用它們的時刻橫切課程。 – alehro