代理方式:
1、jdk自带的动态代理。
2、Spring框架自己提供的CGLIB的方式。
什么是代理呢?
从字面意思来看,代理比较好理解,无非就是代为处理的意思。举个例子,你在上大学的时候,总是喜欢逃课。因此,你拜托你的同学帮你答到,而自己却窝在宿舍玩游戏... 你的这个同学恰好就充当了代理的作用,代替你去上课。
什么是动态代理呢?
就从上面代课的来讲,就是你加了一个代课群,需要代课找群主,那么群主就是代理,根据你课程的需求来找合适的人给你代课而不是固定的一个人,合适的人就是实际操作业务的代码。
JDK动态代理:
如果目标对象实现了接口,默认情况下会采用JDK的动态代理,实现接口的例子就如上面的代课群一样,由群主这个接口来调度,还可以进行方法增强
CGLib动态代理:
不需要实现接口,采用Spring的代理方式,那么群主一个人来接单并代课。
区别:
JDK动态代理要比cglib代理执行速度快,但性能不如cglib好。
JDK的动态代理的
一般单例模式用cglib比较好