如何拦截具有标准Java功能(无AspectJ等)的方法调用?

如何拦截具有标准Java功能(无AspectJ等)的方法调用?,第1张

如何拦截具有标准Java功能(无AspectJ等)的方法调用

如您所述,您不能使用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"


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5477936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存