java – 如何通过环绕构造函数替换类型的实例?

我有一个遗留的lib,它创建了BeanProxy的实例.不幸的是,这个实现有一个我想修复的缺陷.由于我不想开始使用修补的库,我想创建一个包装BeanProxy构造的Aspect并返回我修改过的BeanProxy子类型的实例.

我创建了以下Aspect,只要创建了一个新的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;
    }
}

不幸的是结果总是空的……我做错了什么?我需要改变什么?
我应该提一下,我使用AspectJ LoadTimeWeaving和spring-instrument-3.1.1.RELEASE.jar作为代理.

解决方法:

构造函数执行不返回任何内容(无效).如果要返回创建的对象,请在切入点中使用call:

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

请参阅Contstructor调用和Constructor执行
http://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.html

上一篇:如何让Lombok和AspectJ一起工作?


下一篇:java – 我们可以禁用AOP调用吗?