JDK动态代理 cglib动态代理的深入理解

Posted 循序渐进,不急不躁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK动态代理 cglib动态代理的深入理解相关的知识,希望对你有一定的参考价值。

代理: 可以从社会分工来理解代理,我们每个人都有自己明确的社会分工,比如我的社会分工是程序员, 而代理商,也叫中介也是一种职业。因为社会分工的明确才能提高生产力! 

           举个栗子:

   如果我想去香港买奶粉,那么我可以有两种选择,一种是自己抽时间自己去买奶粉,一种是委托给代购去买奶粉。如果自己去买,那么需要自己去办理通行证,去制定行程路线,去做购物攻略,一个人怕走丢还要约同伴.......等等各种让自己分心分神的事情,那么就生产力而言,如果我委托给代购,那么我能节省更多的时间、精力去做好自己的社会分工,更快的提升自己,让自己的社会价值得到更快的提升。 所以,代理的出现就是为了将社会分工更彻底,我专注就好我的职业就好(代码中的业务逻辑),其他的都可以交给别人去做,不用都自己亲力亲为(亲力亲为导致生产力的低下)。 这样,每个人的社会职责明确,专注做好自己的社会分工,才能实现效率的最大化。

spring的应用:  AOP的底层实现技术    

   OOP:纵向抽象(继承)解决冗余代码    

   AOP:横向抽象解决冗余代码,以及从自己的业务逻辑(主业)中剥离横切逻辑(代理做的)     

 

一:JDK动态代理      通过一个实例来理解

接口: BookFacade

package reflection.demo08;

public interface BookFacade {

   /**
    * 接口
    */
   void addBook();

}

接口实现类:BookFacadeImpl

package reflection.demo08;

public class BookFacadeImpl implements BookFacade{

    /**
     * 接口实现类
     */
    @Override
    public void addBook() {
        System.out.println("增加图书方法。。。");
    }
}

代理类:

package reflection.demo08;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;



public class BookFacadeProxy implements InvocationHandler {

    private Object target;

    /**
     * 绑定委托对象并返回一个代理类
     *
     * @param target
     * @return
     */
    public Object bind(Object target) {
        this.target = target;
        //取得代理对象          这里的this指的是当前类(实现了InvocationHandler接口)
        return Proxy.newProxyInstance(target.getClass().getClassLoader(),
                target.getClass().getInterfaces(), this);   //要绑定接口(这是一个缺陷,cglib弥补了这一缺陷)
    }



    @Override
    /**
     * 调用方法
     */
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        Object result = null;
        System.out.println("事物开始");
        //执行方法
        result = method.invoke(target, args);
        System.out.println("事物结束");
        return result;
    }

}

 

       

 

以上是关于JDK动态代理 cglib动态代理的深入理解的主要内容,如果未能解决你的问题,请参考以下文章

JDK动态代理 cglib动态代理的深入理解

JDK动态代理深入理解分析并手写简易JDK动态代理(上)

深入理解Spring AOP之二代理对象生成

动态代理—— CGLIB代理原理

Spring aop 基于JDK动态代理和CGLIB代理的原理以及为什么JDK代理需要基于接口

Spring aop 基于JDK动态代理和CGLIB代理的原理以及为什么JDK代理需要基于接口