我有一个遗留的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;
}
}
不幸的是result
总是null
...我做错了什么?我需要改变什么?
我应该提一下,我使用AspectJ LoadTimeWeaving和spring-instrument-3.1.1.RELEASE.jar作为代理。
答案 0 :(得分:1)
构造函数execution
不返回任何内容(void
)。如果要返回创建的对象,请在切入点中使用call
:
@Pointcut("call(public flex.messaging.io.BeanProxy.new(..))")
void createBeanProxy() {}
参见 Contstructor call 和 Constructor execution http://www.eclipse.org/aspectj/doc/next/progguide/semantics-joinPoints.html