java 动态代理,反射 回顾
2018-03-01 10:40
555 查看
有很多文章写的很好了,我来搬运下。
理解java反射 https://www.cnblogs.com/haodawang/p/5967185.html java动态代理 https://www.cnblogs.com/gonjan-blog/p/6685611.html
说说为什么yao用动态代理
1. 一般情况下,想要对一个现有的方法添加一些额外的操作有这样几种办法:比如:public void test(){System.out.println("hello world");}在这个方法输出hello world前添加一个log记录:(这里我们简单就输出一下) System.out.println("log");
1.直接改源代码,直接添加代码:public void test(){ System.out.println("log"); System.out.println("hello world");}这样做非常不灵活,死板,如果有上千个方法都要添加log实现,就不行了。2.使用继承,创建一个子类继承当前类,然后调用super方法实现。class childclass extends fatherclass{ public void test(){ System.out.println("log"); super.test();}}这个比改源代码好很多,但是耦合性还是很高,一旦父类发生改变,所有的子类都要变化。同时,我如果想要把两个父类的应用合并,比如说要给另外一个类的save方法添加相同的log,我就得再写一个子类去添加log记录,因为继承永远是单线操作的,你不能同时继承两个类。3.使用组合,相当于把继承改为实现接口,因为多个类可以实现同一个接口,这样的话不同的类可以实现相互的调用。class test1 implements interfaceOriginal(){ public void test(){ System.out.println("hello world"); }}class test2 implements interfaceOriginal(){ interfaceOriginal inter = new test2(); //new 一个test2的对象 public void test(){ System.out.println("log"); inter.save(); }}如果我们想要在这基础之上把两个应用合并,比如在加上log上面再加上时间记录 System.out.println("time"); class test3 implements interfaceOriginal(){ interfaceOriginal inter2 = new test2(); public void test(){ System.out.println("time"); inter2.test();//这个test已经在前面添加了log记录。 }}注意这里的区别,继承无法给其他不是父类的类添加代码。比如这里test2 是另外一个类,他和test1之间没有相互继承,那么如果test3继承了test1,他并不能对test2添加方法。继承是单线的操作。但是这样套来套去并还不够好,如果有1000个方法需要处理,代码量还是很大。
4.这个时候就是动态代理了。动态的遍历所有方法,动态的添加想要添加的任意一个操作,比如log或者time。
理解java反射 https://www.cnblogs.com/haodawang/p/5967185.html java动态代理 https://www.cnblogs.com/gonjan-blog/p/6685611.html
说说为什么yao用动态代理
1. 一般情况下,想要对一个现有的方法添加一些额外的操作有这样几种办法:比如:public void test(){System.out.println("hello world");}在这个方法输出hello world前添加一个log记录:(这里我们简单就输出一下) System.out.println("log");
1.直接改源代码,直接添加代码:public void test(){ System.out.println("log"); System.out.println("hello world");}这样做非常不灵活,死板,如果有上千个方法都要添加log实现,就不行了。2.使用继承,创建一个子类继承当前类,然后调用super方法实现。class childclass extends fatherclass{ public void test(){ System.out.println("log"); super.test();}}这个比改源代码好很多,但是耦合性还是很高,一旦父类发生改变,所有的子类都要变化。同时,我如果想要把两个父类的应用合并,比如说要给另外一个类的save方法添加相同的log,我就得再写一个子类去添加log记录,因为继承永远是单线操作的,你不能同时继承两个类。3.使用组合,相当于把继承改为实现接口,因为多个类可以实现同一个接口,这样的话不同的类可以实现相互的调用。class test1 implements interfaceOriginal(){ public void test(){ System.out.println("hello world"); }}class test2 implements interfaceOriginal(){ interfaceOriginal inter = new test2(); //new 一个test2的对象 public void test(){ System.out.println("log"); inter.save(); }}如果我们想要在这基础之上把两个应用合并,比如在加上log上面再加上时间记录 System.out.println("time"); class test3 implements interfaceOriginal(){ interfaceOriginal inter2 = new test2(); public void test(){ System.out.println("time"); inter2.test();//这个test已经在前面添加了log记录。 }}注意这里的区别,继承无法给其他不是父类的类添加代码。比如这里test2 是另外一个类,他和test1之间没有相互继承,那么如果test3继承了test1,他并不能对test2添加方法。继承是单线的操作。但是这样套来套去并还不够好,如果有1000个方法需要处理,代码量还是很大。
4.这个时候就是动态代理了。动态的遍历所有方法,动态的添加想要添加的任意一个操作,比如log或者time。
相关文章推荐
- Java反射与动态代理
- java学习之路 之 反射机制综合练习题、动态代理实例
- JAVA中的反射机制和动态代理
- JAVA的反射机制与动态代理
- Java基础(反射,类加载,动态代理)
- 黑马程序员——Java反射&动态代理
- Java学习笔记之反射的应用-动态代理
- Java反射与动态代理
- 【Java反射学习笔记系列之jdk动态代理】静态代理和动态代理的区别以及动态代理的作用和实现
- Java动态代理与反射详解
- Java基础 - 类的加载,类加载器,反射,动态代理,模板设计模式,JDK5新特性,枚举(类),JDK1.7新特性
- 【转】java的反射机制中的动态代理代理(二)--在远程方法调用中运用代理类
- java反射——运用反射生成jdk动态代理
- Java回炉之反射(二)动态代理
- JAVA JDK的动态代理反射实现
- Java反射与动态代理
- java反射应用之动态代理
- Java反射之JDK动态代理实现简单AOP
- java类初始化/生命周期及反射及动态代理
- Java反射之JDK动态代理实现简单AOP