我有一个遗留的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