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 回答