java 动态代理(cglib)


java 动态代理(cglib)

 

               

动态代理:代理类绑定Class对象,来实现为不同的类或者接口创建代理对象

 

 

*******************************

相关类及接口

 

Enhancer:对象增强类

public class Enhancer extends AbstractClassGenerator {

********
构造方法

    public Enhancer() {

********
常用方法

    public void setSuperclass(Class superclass) {    //设置父类
    public void setInterfaces(Class[] interfaces) {  //设置上层接口
    public void setCallback(Callback callback) {     //设置回调函数

    public Object create() {  //创建代理对象

 

MethodInterceptor:方法拦截接口

public interface MethodInterceptor extends Callback {
    Object intercept(Object var1, Method var2, Object[] var3, MethodProxy var4) throws Throwable;
     //var1为代理对象、var2为被代理对象方法、var3为方法参数、var4为代理对象的代理方法
}

 

 

*******************************

示例

 

interface A1{
    void fun1();
}

interface A2{
    void fun2();
}

class RealA1Object implements A1{

    @Override
    public void fun1() {
        System.out.println("真实对象A1");
    }
}

class RealA2Object implements A2{

    @Override
    public void fun2() {
        System.out.println("真实对象A2");
    }
}

class Proxy2Object implements MethodInterceptor {

    public Object getProxy(Class clz){
        Enhancer enhancer=new Enhancer();
        enhancer.setSuperclass(clz);
        enhancer.setCallback(this);

        return enhancer.create();
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("代理对象开始调用");
        methodProxy.invokeSuper(o,objects);
        System.out.println("代理对象调用结束\n");
        return null;
    }
}

public class MyTest2 {

    public static void main(String[] args){
        Proxy2Object proxy2Object=new Proxy2Object();

        A1 a1=(A1)proxy2Object.getProxy(RealA1Object.class);
        a1.fun1();

        A2 a2=(A2)proxy2Object.getProxy(RealA2Object.class);
        a2.fun2();
    }
}

 

*****************

控制台输出

 

代理对象开始调用
真实对象A1
代理对象调用结束

代理对象开始调用
真实对象A2
代理对象调用结束

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值