代理方式:

    1、jdk自带的动态代理。

    2、Spring框架自己提供的CGLIB的方式。

什么是代理呢?

    从字面意思来看,代理比较好理解,无非就是代为处理的意思。举个例子,你在上大学的时候,总是喜欢逃课。因此,你拜托你的同学帮你答到,而自己却窝在宿舍玩游戏... 你的这个同学恰好就充当了代理的作用,代替你去上课。

什么是动态代理呢?

    就从上面代课的来讲,就是你加了一个代课群,需要代课找群主,那么群主就是代理,根据你课程的需求来找合适的人给你代课而不是固定的一个人,合适的人就是实际操作业务的代码。

JDK动态代理:

    如果目标对象实现了接口,默认情况下会采用JDK的动态代理,实现接口的例子就如上面的代课群一样,由群主这个接口来调度,还可以进行方法增强

CGLib动态代理:

    不需要实现接口,采用Spring的代理方式,那么群主一个人来接单并代课。

区别:

    JDK动态代理要比cglib代理执行速度快,但性能不如cglib好。

    JDK的动态代理的

    一般单例模式用cglib比较好