我想拦截对某个类 MyClass 的所有方法调用,以便能够对某些 setter 调用做出反应。
我尝试使用动态代理,但据我所知,这只适用于实现某些接口的类。但MyClass没有这样的接口。
除了实现包装类之外,是否还有其他方法将所有调用委托给成员(该成员是 MyClass 的实例或除了使用 AOP 之外)?
正如您所注意到的,您不能使用 JDK 动态代理(无接口),但可以使用Spring和 CGLIB(Spring 附带的 JAR),您可以执行以下操作:
public class Foo
{
public void setBar()
{
throw new UnsupportedOperationException("should not go here");
}
public void redirected()
{
System.out.println("Yiha");
}
}
Foo foo = new Foo();
ProxyFactory pf = new ProxyFactory(foo);
pf.addAdvice(new MethodInterceptor()
{
public Object invoke(MethodInvocation mi) throws Throwable
{
if (mi.getMethod().getName().startsWith("set"))
{
Method redirect = mi.getThis().getClass().getMethod("redirected");
redirect.invoke(mi.getThis());
}
return null;
}
});
Foo proxy = (Foo) pf.getProxy();
proxy.setBar(); // prints "Yiha"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)