收藏此站 联系我们 网站
当前位置:首页» 技术日志 » 【建站服务】凤城网页设计-高端网站设计公司-域名申请

【建站服务】凤城网页设计-高端网站设计公司-域名申请

作者: 风兰 . 阅读量: 5 . 发表时间:2022-09-21 04:33:09

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


凤城网页设计-高端网站设计公司

网站建设.png

   @Override    public String toString() {        return "TargetObject []"+ getClass();    }}

2、拦截器:

定义一个拦截器。在调用目标方法时,CGLib会回调MethodInterceptor接口方法拦截,来实现你自己的代理逻辑,类似于JDK中的InvocationHandler接口。

package com.zghw.cglib; import java.lang.reflect.Method; import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;/** * 目标对象拦截器,实现MethodInterceptor * @author zghw * */public class TargetInterceptor implements MethodInterceptor{    /**     * 重写方法拦截在方法前和方法后加入业务     * Object obj为目标对象     * Method method为目标方法     * Object[] params 为参数,     * MethodProxy proxy CGlib方法代理对象     */    @Override    public Object intercept(Object obj, Method method, Object[] params,            MethodProxy proxy) throws Throwable {        System.out.println("调用前");        Object result = proxy.invokeSuper(obj, params);        System.out.println(" 调用后"+result);        return result;    } }

参数:Object为由CGLib动态生成的代理类实例,Method为上文中实体类所调用的被代理的方法引用,Object[]为参数值列表,MethodProxy为生成的代理类对方法的代理引用。

返回:从代理实例的方法调用返回的值。

其中,proxy.invokeSuper(obj,arg) 调用代理类实例上的proxy方法的父类方法(即实体类TargetObject中对应的方法)

在这个示例中,只在调用被代理类方法前后各打印了一句话,当然实际编程中可以是其它复杂逻辑。

3、生成动态代理类:

package com.zghw.cglib; import net.sf.cglib.proxy.Callback;import net.sf.cglib.proxy.CallbackFilter;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.NoOp; public class TestCglib {    public static void main(String args[]) {        Enhancer enhancer =new Enhancer();        enhancer.setSuperclass(TargetObject.class);        enhancer.setCallback(new TargetInterceptor());        TargetObject targetObject2=(TargetObject)enhancer.create();        System.out.println(targetObject2);        System.out.println(targetObject2.method1("mmm1"));        System.out.println(targetObject2.method2(100));        System.out.println(targetObject2.method3(200));    }}

这里Enhancer类是CGLib中的一个字节码增强器,它可以方便的对你想要处理的类进行扩展,以后会经常看到它。

首先将被代理类TargetObject设置成父类,然后设置拦截器TargetInterceptor,最后执行enhancer.create()动态生成一个代理类,并从Object强制转型成父类型TargetObject。

最后,在代理类上调用方法。

4、回调过滤器CallbackFilter

一、作用

在CGLib回调时可以设置对不同方法执行不同的回调逻辑,或者根本不执行回调。

在JDK动态代理中并没有类似的功能,对InvocationHandler接口方法的调用对代理类内的所以方法都有效。

定义实现过滤器CallbackFilter接口的类:


        System.out.println(targetObject2.method3(200));

    }

}

这里Enhancer类是CGLib中的一个字节码增强器,它可以方便的对你想要处理的类进行扩展,以后会经常看到它。


首先将被代理类TargetObject设置成父类,然后设置拦截器TargetInterceptor,最后执行enhancer.create()动态生成一个代理类,并从Object强制转型成父类型TargetObject。


最后,在代理类上调用方法。


4、回调过滤器CallbackFilter


一、作用


在CGLib回调时可以设置对不同方法执行不同的回调逻辑,或者根本不执行回调。


在JDK动态代理中并没有类似的功能,对InvocationHandler接口方法的调用对代理类内的所以方法都有效。


定义实现过滤器CallbackFilter接口的类:


package com.zghw.cglib;

 

import java.lang.reflect.Method;

 

import net.sf.cglib.proxy.CallbackFilter;

/**

 * 回调方法过滤

 * @author zghw

 *

 */

public class TargetMethodCallbackFilter implements CallbackFilter {

 

    /**

     * 过滤方法

     * 返回的值为数字,代表了Callback数组中的索引位置,要到用的Callback

     */

    @Override

    public int accept(Method method) {

        if(method.getName().equals("method1")){

            System.out.println("filter method1 ==0");

            return 0;

        }

        if(method.getName().equals("method2")){

            System.out.println("filter method2 ==1");

            return 1;

        }

        if(method.getName().equals("method3")){

            System.out.println("filter method3 ==2");

            return 2;

        }

        return 0;

    }

 

}

其中return值为被代理类的各个方法在回调数组Callback[]中的位置索引(见下文)。


package com.zghw.cglib;

 

import net.sf.cglib.proxy.Callback;

import net.sf.cglib.proxy.CallbackFilter;

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.NoOp;

 

public class TestCglib {

    public static void main(String args[]) {

        Enhancer enhancer =new Enhancer();

        enhancer.setSuperclass(TargetObject.class);

        CallbackFilter callbackFilter = new TargetMethodCallbackFilter();

        

        /**

         * (1)callback1:方法拦截器

           (2)NoOp.INSTANCE:这个NoOp表示no operator,即什么操作也不做,代理类直接调用被代理的方法不进行拦截。


凤城网页设计-高端网站设计公司


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务