当我们需要给某个类或者接口中的方法添加一些额外的功能比如日志、事务的时候,可以通过创建一个代理类来实现这些功能;该代理类既包含了原有类的完整功能,同时在这些功能的基础上添加了其他的逻辑。这个代理类不是事先定义好的,而是动态生成的,比较灵活;
1.java动态代理
java动态代理有个缺点就是要被代理的类必须实现一个接口,否则没法代理
2.cglib动态代理
cglib动态代理可以对没有实现接口的类进行代理
AOP在我们用到spring框架的时候碰到的aop前置后置通知都是基于动态代理来实现的,这里不细追。
怎么实现动态代理?
(1)jdk动态代理;(2)CGLIB动态代理(这个是第三方实现的,所以使用这种方式,我们要引入jar包)与jdk动态代理相比,CGLIB不要求必须要实现接口StudentInterface ,就能直接对目标对象就行代理增强,更加的简单方便。
22、为什么要使用克隆?
Java中的克隆是指创建一个与原始对象完全相同的新对象,包括它的属性和值。在Java中,我们可以通过实现Cloneable接口并覆盖Object类中的clone()方法来实现克隆。
使用克隆的主要原因如下:
避免对原始对象的修改。如果需要创建一个新对象,但不想改变原始对象的状态,那么克隆就非常有用了。通过克隆可以创建一个新对象,该对象的属性和原始对象相同,但是对新对象所做的更改不会影响原始对象的状态。
提高性能。在某些情况下,克隆可以比手动创建一个新对象更快。这是因为,当克隆一个对象时,只需要复制现有的数据结构,而不需要重新计算或分配内存。
隐藏实现细节。克隆可以使代码更易于维护,并且可以隐藏一些实现细节。例如,某个对象可能需要使用复杂的初始化过程才能被创建,但是通过克隆,我们可以避免让客户端了解这些实现细节。