网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

如何编写代码来实现内部之间调用拦截

这篇文章主要介绍“如何编写代码来实现内部之间调用拦截”,在日常操作中,相信很多人在如何编写代码来实现内部之间调用拦截问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何编写代码来实现内部之间调用拦截”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司专注于长泰网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供长泰营销型网站建设,长泰网站制作、长泰网页设计、长泰网站官网定制、成都微信小程序服务,打造长泰网络公司原创品牌,更为您提供长泰网站排名全网营销落地服务。

下面是CGLib的原生写法(使用net.sf.cglib.proxy.*包内的类实现)

class Foo {public void fun1(){
        System.out.println("fun1");
        fun2();
    }public void fun2() {
        System.out.println("fun2");
    }
}class CGlibProxyEnhancer implements MethodInterceptor{public Object getProxy(Class clazz) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(clazz);
        enhancer.setCallback(this);return enhancer.create();
    }@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        System.out.print("before ");Object result = proxy.invokeSuper(obj,args);return result;
    }
}public class Test {public static void main(String[] args) {
        CGlibProxyEnhancer pf = new CGlibProxyEnhancer();
        Foo foo = (Foo) pf.getProxy(Foo.class);
        foo.fun1();
    }
}

打印结果是:
before fun1
before fun2
可以看到,虽然fun2()是通过foo.fun1()调用的,但fun()2依然能被代理。

但如果用Spring AOP那套基本写法的话:

class Foo {public void fun1() {System.out.println("fun1");
        fun2();
    }public void fun2() {System.out.println("fun2");
    }
}class Before implements MethodBeforeAdvice {public void before(Method method, Object[] objects, Object o) throws Throwable {System.out.print("before ");
    }
}public class TestCGLib {public static void main(String[] args) {
        Foo foo = new Foo();
        BeforeAdvice advice = new Before();
        ProxyFactory pf = new ProxyFactory();
        pf.setOptimize(true);//启用Cglib2AopProxy创建代理
        pf.setProxyTargetClass(true);
        pf.setTarget(foo);
        pf.addAdvice(advice);
        Foo proxy = (Foo) pf.getProxy();
        proxy.fun1();
    }
}

输出结果是:
before fun1
fun2
可见fun2方法没有被代理。

这个帖子中还说到了如何将cglib中的fun2改为private则最终结果与常规AOP的一样.

到此,关于“如何编写代码来实现内部之间调用拦截”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


当前名称:如何编写代码来实现内部之间调用拦截
文章起源:http://bjjierui.cn/article/ijgocg.html

其他资讯