程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上
Java实现动态代理常见的有:
-
JDK内置的动态代理,只能代理接口,java.lang.reflect.Porxy ,是一个注解。
-
CGLIB(Code Generation Library)动态代理,是一个开源项目,生成类库,可以适用于接口和类。
SpringBoot默认使用CGLIB的原因:
-
无需接口: CGLIB能够代理那些没有实现接口的类,而JDK动态代理只能代理实现了接口的类。
-
AOP支持: Spring Boot广泛使用AOP来处理日志、事务、安全性等横切关注点。CGLIB更适合创建AOP代理,因为它可以代理普通的类而不仅仅是接口,在开发中如果通过反射获得代理目标方法的注解,如果用JDK动态代理将导致无法获取。
-
性能: 执行代理方法时,CGLIB动态代理比JDK动态代理要快得多,因为它直接调用目标方法,而无需像JDK代理还要通过反射进行内部方法栈调用才能到目标方法。
系列文章索引
MyBatis的插件能在哪些地方进行拦截?
了解MyBatis的缓存机制吗
面试官:谈谈对volatile的理解
Spring中用到了哪些设计模式
面试官:说一下SQL的执行过程
线程池的工作原理