📒个人主页:热爱生活的李📒
❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章❤️
🙏本人也在学习阶段,如若发现问题,请告知,非常感谢🙏
动态代理
代理类在程序运行时创建的代理方式被称为动态代理
静态代理中,代理类是自己定义好的,在程序运行之前就已经编译完成。然而动态代理,代理类并不是在Java代码中定义的,而是运行时根据我们在Java代码中的指示动态生成的。相比较静态代理,动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法,比如想要在每个代理方法前都加上一个处理方法,静态代理就需要在每个类内部加上这个方法
静态代理与动态代理的区别
静态代理
优点
简单、效率高、容易理解
缺点
当目标类增多,代理类也需要增加
当接口方法增加或修改的时候,很多类都需要修改,因为目标类和代理类都实现了相同的接口
动态代理
优点
动态代理中的目标类很多的时候代理类的数量可以很少
修改接口的方法的时候不会影响到代理类
代理类可以自动帮助我们生成无需手动
JDK动态代理
JDK动态代理是基于反射机制,生成一个实现代理接口的匿名类,然后重写方法进行方法增强。在调用具体方法前通过调用InvokeHandler的invoke方法来处理。
他的特点是生成代理类的速度很快,但是运行时调用方法操作会比较慢,因为是基于反射机制的,而且只能针对接口编程,即目标对象要实现接口
public interface Person {
void sayHi();
}
public class Student implements Person{
@Override
public void sayHi() {
System.out.println("Hi 我是一名学生");
}
}
public class JDKProxy implements InvocationHandler {
Object target;
public Object newProxy(Object obj){
this