2

インスタンス化モデル内のpertypeを使用してトレースアスペクトを実装しようとしています。このようにして、タイプごとにクラスごとに1つのロガーを使用できるようになります。

私たちの周りのいくつかの例から、ロガーを初期化するためのこのコードを見つけることができます:

public abstract aspect TraceAspect pertypewithin(com.something.*) {
    abstract pointcut traced();
    after() : staticinitialization(*) {
        logger = Logger.getLogger(getWithinTypeName());
    }
    before() : traced() {
        logger.log(...);
    }
    //....
}

残念ながら、これを@AspectJ構文に完全に変換することはできません(これは私の制御外のプロジェクト要件です)。特に、ロガーをセットアップしてそのコードを1回だけ実行する必要がある部分です。

これは可能ですか?

ありがとう、

4

1 に答える 1

7
@Aspect("pertypewithin(com.something.*))")
public abstract class TraceAspect {

Logger logger;

@Pointcut
public abstract void traced();

@Pointcut("staticinitialization(*)")
public void staticInit() {
}

@After(value = "staticInit()")
public void initLogger(JoinPoint.StaticPart jps) {
    logger = Logger.getLogger(jps.getSignature().getDeclaringTypeName());
}

@Before(value = "traced()")
public void traceThatOne(JoinPoint.StaticPart jps) {
    logger.log(jps.getSignature().getName());
}
}
于 2011-09-12T20:08:14.407 に答える