您身边的网站建设专家
成功案例

【建站服务】凤城企业网站设计 - 凤城高端网站定制 - 凤城品牌网站搭建 - 上往建站-域名申请

日期: 2022-09-21 04:30:19 浏览数:5


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


凤城企业网站设计 - 凤城高端网站定制 - 凤城品牌网站搭建 - 上往建站

网站建设.png

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,即什么操作也不做,代理类直接调用被代理的方法不进行拦截。           (3)FixedValue:表示锁定方法返回值,无论被代理类的方法返回什么值,回调方法都返回固定值。         */        Callback noopCb=NoOp.INSTANCE;        Callback callback1=new TargetInterceptor();        Callback fixedValue=new TargetResultFixed();        Callback[] cbarray=new Callback[]{callback1,noopCb,fixedValue};        //enhancer.setCallback(new TargetInterceptor());        enhancer.setCallbacks(cbarray);        enhancer.setCallbackFilter(callbackFilter);        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(100));        System.out.println(targetObject2.method3(200));    }}
package com.zghw.cglib; import net.sf.cglib.proxy.FixedValue;/** * 表示锁定方法返回值,无论被代理类的方法返回什么值,回调方法都返回固定值。 * @author zghw * */public class TargetResultFixed implements FixedValue{    /**     * 该类实现FixedValue接口,同时锁定回调值为999     * (整型,CallbackFilter中定义的使用FixedValue型回调的方法为getConcreteMethodFixedValue,该方法返回值为整型)。     */    @Override    public Object loadObject() throws Exception {        System.out.println("锁定结果");        Object obj = 999;        return obj;    } }

5.延迟加载对象

一、作用:

说到延迟加载,应该经常接触到,尤其是使用Hibernate的时候,本篇将通过一个实例分析延迟加载的实现方式。 LazyLoader接口继承了Callback,因此也算是CGLib中的一种Callback类型。

另一种延迟加载接口Dispatcher。

Dispatcher接口同样继承于Callback,也是一种回调类型。

但是Dispatcher和LazyLoader的区别在于:LazyLoader只在第一次访问延迟加载属性时触发代理类回调方法,而Dispatcher在每次访问延迟加载属性时都会触发代理类回调方法。

二、示例:

首先定义一个实体类LoaderBean,该Bean内有一个需要延迟加载的属性PropertyBean。

package com.zghw.cglib; import net.sf.cglib.proxy.Enhancer; public class LazyBean {


是Dispatcher和LazyLoader的区别在于:LazyLoader只在第一次访问延迟加载属性时触发代理类回调方法,而Dispatcher在每次访问延迟加载属性时都会触发代理类回调方法。


二、示例:


首先定义一个实体类LoaderBean,该Bean内有一个需要延迟加载的属性PropertyBean。


package com.zghw.cglib;

 

import net.sf.cglib.proxy.Enhancer;

 

public class LazyBean {

    private String name;

    private int age;

    private PropertyBean propertyBean;

    private PropertyBean propertyBeanDispatcher;

 

    public LazyBean(String name, int age) {

        System.out.println("lazy bean init");

        this.name = name;

        this.age = age;

        this.propertyBean = createPropertyBean();

        this.propertyBeanDispatcher = createPropertyBeanDispatcher();

    }

 

    

 

    /**

     * 只第一次懒加载

     * @return

     */

    private PropertyBean createPropertyBean() {

        /**

         * 使用cglib进行懒加载 对需要延迟加载的对象添加代理,在获取该对象属性时先通过代理类回调方法进行对象初始化。

         * 在不需要加载该对象时,只要不去获取该对象内属性,该对象就不会被初始化了(在CGLib的实现中只要去访问该对象内属性的getter方法,

         * 就会自动触发代理类回调)。

         */

        Enhancer enhancer = new Enhancer();

        enhancer.setSuperclass(PropertyBean.class);

        PropertyBean pb = (PropertyBean) enhancer.create(PropertyBean.class,

                new ConcreteClassLazyLoader());

        return pb;

    }

    /**

     * 每次都懒加载

     * @return

     */

    private PropertyBean createPropertyBeanDispatcher() {

        Enhancer enhancer = new Enhancer();

        enhancer.setSuperclass(PropertyBean.class);

        PropertyBean pb = (PropertyBean) enhancer.create(PropertyBean.class,

                new ConcreteClassDispatcher());

        return pb;

    }

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public int getAge() {

        return age;

    }

 

    public void setAge(int age) {

        this.age = age;

    }


凤城企业网站设计 - 凤城高端网站定制 - 凤城品牌网站搭建 - 上往建站


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

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


全国咨询热线:400-111-6878

地址:全国各地都有驻点商务

Copyright © 2021 通陆科技

网站建设上往建站