4

のインスタンスを作成するレガシー ライブラリがありますBeanProxy。残念ながら、この実装には修正したい欠陥があります。パッチが適用されたライブラリで作業を開始したくないので、構成をラップする Aspect を作成し、変更されたサブタイプBeanProxyのインスタンスを返したいと考えました。BeanProxy

次のアスペクトを作成しましたが、新しいインスタンスBeanProxyが作成されるたびに正しく織り込まれ、呼び出されます。

@Aspect
public class CWebBeanProxyInjectingAspect {

    @Pointcut("execution(public flex.messaging.io.BeanProxy.new(..))")
    void createBeanProxy() {}

    @Around("createBeanProxy()")
    public Object createAlternateBeanProxy(final ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("createAlternateBeanProxy");
        final Object result = pjp.proceed();
        System.out.println(result);
        return result;
    }
}

残念ながらresult、常にnull...私は何を間違っていますか? 何を変更する必要がありますか? AspectJ LoadTimeWeaving と spring-instrument-3.1.1.RELEASE.jar をエージェントとして使用していることに言及する必要があります。

4

1 に答える 1

1

コンストラクターexecutionは何も返しません (is void)。作成したオブジェクトを返したい場合callは、ポイントカットで次を使用します。

  @Pointcut("call(public flex.messaging.io.BeanProxy.new(..))")
    void createBeanProxy() {}

http://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.htmlのコンストラクター呼び出しコンストラクター実行を 参照してください。

于 2013-01-08T17:07:09.233 に答える