设计模式
一共58篇文章
专题:第7期
-
AOP 是什么?有哪些作用?
参考答案 AOP 的概念 AOP 的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程); 是函数式编程的一种衍生泛型,隶属于软工范畴,指导开发者如何组织程序结构; 是面向对象编程(OOP)的一种补充; 是Spring框架中的一个重要内容。 AOP 的作用 在不修改目标类代码的前提下,去增强目标类的功能,通过 预编译方式 或 运行期动态代理实现程序功能的…...- 宝妹儿
- 9
- 0
-
Spring 如何选择:用 JDK 动态代理还是 CGLIB 动态代理?
参考答案 Spring 如何选择:用 JDK 还是 CGLIB ? 当 Bean 实现接口时,Spring 用JDK 动态代理。 当 Bean 没有实现接口时,Spring 使用CGLIB 动态代理实现。 可以强制使用CGLIB。 以上,是Java面试题【Spring 如何选择:用 JDK 还是 CGLIB ?】的参考答案。 输出,是最好的学习方法。 欢迎在评论区留下你的问题、笔记或…...- 宝妹儿
- 83
- 0
-
CGLIB 和 JDK ,哪个更快?
参考答案 CGLIB 与 JDK 对比哪个更快,不同的 jdk 版本,会有差异,以下详解。 使用 CGLIB 实现动态代理, CGLIB 底层采用 ASM 字节码生成框架,使用字节码技术生成代理类, 在 jdk6 之前,比使用 Java 反射效率要高。但要注意,由于CGLIB 原理是动态生成被代理类的子类, CGLIB 不能对声明为 final 的方法进行代理 。 从jdk6、jdk7 到 jdk…...- 宝妹儿
- 7
- 0
-
JDK静态代理、JDK动态代理、CGLIB动态代理的区别/优缺点
参考答案 JDK静态代理、JDK动态代理、CGLIB动态代理的区别以及优缺点,总结如下图: 代理方式 实现 优点 缺点 特点 JDK 静态代理 代理类与委托类实现同一接口,并且在代理类中需要硬编码接口 实现简单,容易理解 代理类需要硬编码接口,在实际应用中可能会导致重复编码,浪费存储空间并且效率很低 JDK 动态代理 代理类与委托类实现同一接口,主要是通过代理类实现InvocationHandle…...- 宝妹儿
- 8
- 0
-
Fastclass机制是什么,说下
参考答案 Fastclass机制是什么 CGLIB 是采用 FastClass 机制,实现对被拦截方法的调用的。 FastClass 机制,是对一个类的方法建立索引,通过索引直接调用相应的方法。 Fastclass机制的代码实例 public class test10 { //这里,tt可以看作目标对象,fc可以看作是代理对象;首先根据代理对象的getIndex方法获取目标方法的索引, //然后再…...- 宝妹儿
- 91
- 0
-
JDK 静态代理和 JDK 动态代理的区别
JDK 静态代理和 JDK 动态代理的区别 JDK 静态代理,是通过直接编码创建的。 JDK 动态代理,是利用反射机制在运行时创建代理类的。 在动态代理中,核心是 InvocationHandler。 每一个代理的实例都会有一个关联的调用处理程序( InvocationHandler )。调用代理实例时,将对方法的调用进行编码,并指派到它的调用处理器( InvocationHandler )的in…...- 宝妹儿
- 120
- 0
-
JDK 动态代理的五大使用步骤(附代码实例)
参考答案 JDK 动态代理的五大使用步骤 通过实现 InvocationHandler 接口,来自定义自己的 InvocationHandler ; 通过 Proxy.getProxyClass,获得动态代理类; 通过反射机制,获得代理类的构造方法,方法签名为getConstructor(InvocationHandler.class); 通过构造函数,获得代理对象,并将自定义的Invocatio…...- 宝妹儿
- 70
- 0
-
静态代理的使用方法及实现步骤(附源码解析)
参考答案 静态代理的使用方法及实现步骤(附源码解析)如下: 1. 静态代理的使用方法及实现步骤 创建一个接口; 创建被代理的类,实现该接口,并且实现该接口中的抽象方法; 创建一个代理类,同时让这个代理类,也实现这个接口; 在代理类中,持有一个被代理对象的引用。在代理类方法中,调用该对象的方法。 2. 静态代理的源码解析 public interface UserDao { void…...- 宝妹儿
- 65
- 0
-
手写一个 ArrayList 的动态代理类(笔试题)
参考答案: 手写一个ArrayList 的动态代理类: final List<String> list = new ArrayList<String>(); List<String> proxyInstance = (List<String>) Proxy.newProxyInstance(list.getClass().getClassLoader…...- 宝妹儿
- 11
- 0
-
JDK 动态代理和 CGLIB 动态代理的区别
参考答案 Spring AOP中的动态代理主要有两种方式:JDK 动态代理和 CGLIB 动态代理: JDK动态代理 只提供接口的代理,不支持类的代理。 核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个…...- 宝妹儿
- 140
- 0
-
Spring 的 bean 为什么是单例
参考答案 一、Spring 把bean默认设计成单例的主要原因 1. 少创建实例; 2. 垃圾回收; 3. 缓存快速获取。 二、单例bean的优势 由于不会每次都新创建新对象,所以单例在性能方面有如下优势: 1.减少了新生成实例的消耗 新生成实例消耗包括两方面,第一,spring会通过反射或者cglib来生成bean实例这都是耗性能的操作,其次给对象分配内存也会涉及复杂算法。 2.减…...- 宝妹儿
- 36
- 0
-
CGLIB 动态代理的实现原理、实现步骤、源码实例
参考答案 CGLIB 动态代理的实现原理 利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。 CGLIB 动态代理的实现步骤 先实现一个 MethodInterceptor,方法调用会被转发到该类的intercept() 方法。 在要使用时,通过 CGLIB 动态代理,来获取代理对象。 CGLIB 动态代理的实现源码实例 publi…...- 宝妹儿
- 7
- 0