Spring代理模式(CGLIB动态代理模式)

jdk动态代理和CGLIB动态代理 没什么太大的区别,CGLIB动态代理不需要接口,但是需要导入jar包。

 

房东出租房子的方法:

package com.bjsxt.proxy2;

public class FangDong {

    public void  zuFang(){
        System.out.println("出租学院东校区对面和顺小区A401");
    }
}

 

核心:CGLIB动态代理模式

package com.bjsxt.proxy2;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class MethodZj implements MethodInterceptor {

    //产生代理对象
    public  Object getProxy(){
        Enhancer en=new Enhancer();
        //类似于接口
        en.setSuperclass(FangDong.class);
        en.setCallback(this);

        //使整个内容生效
        Object o = en.create();

        return o;
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

        /**
         * o:被代理的对象
         *
         * method:被代理对象的方法:public void com.bjsxt.proxy2.FangDong.zuFang()
         *
         *objects:参数:[Ljava.lang.Object;@4b85612c
         *
         * methodProxy:代理对象的方法:net.sf.cglib.proxy.MethodProxy@277050dc
         */
        System.out.println(method+"---"+objects+"----"+methodProxy);
        System.out.println("收取介绍费100");

        //调用房东的方法
        Object o1 = methodProxy.invokeSuper(o, objects);

        System.out.println("收取管理费500");
        return o1;
    }
}

 

测试类:

package com.bjsxt.proxy2;

public class Test {
    public static void main(String[] args) {
        MethodZj m=new MethodZj();
        FangDong proxy = (FangDong)m.getProxy();
        proxy.zuFang();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值