手写代码实现JDK动态代理的过程:
1. 声明一段源码,这段源码动态生成我们的动态代理;
2. 把源码生成Java文件;
3. 获取系统的Java编译器(JavaCompiler类似与javac);
4. 利用文件管理者StandardJavaFileManager,获取需要编译的文件(Iterable);
5. 调用编译的任务();
6. 进行编译;
7. 编译完成后会生成class文件;
8. 把class文件加载到内存中;
9. 产生一个代理类的对象,并返回该对象;
10. 在测试类中;
11. 测试类中创建一个InvocationHandler(专门做事务处理);
1. 声明一段源码,这段源码动态生成我们的动态代理;
2. 把源码生成Java文件;
3. 获取系统的Java编译器(JavaCompiler类似与javac);
4. 利用文件管理者StandardJavaFileManager,获取需要编译的文件(Iterable);
5. 调用编译的任务();
6. 进行编译;
7. 编译完成后会生成class文件;
8. 把class文件加载到内存中;
9. 产生一个代理类的对象,并返回该对象;
10. 在测试类中;
11. 测试类中创建一个InvocationHandler(专门做事务处理);
2018-05-16
invoke()参数中的Object proxy就是生成的代理对象,你们可以试一下,在method.Invoke的时候传入proxy参数,这个时候运行起来,他会形成一个递归的效果,一直重复调用实现了InvocationHandler接口类中的Invoke()方法
2018-05-05
最赞回答 / 假蛙工程师
首先this指代的是当前类的对象。当前类是cglibProxy,所以this指代是cglibProxy类的对象。当前类应该容易理解当前声明的类。想了解更多继续看。官方文档: this 称为隐式参数。这个应用应该见过:public class Student { private String name; public void setName(String n) { name = n; }}Student stu = new Student();stu.setName("...
2018-05-04
最赞回答 / 嘉禾种嘉禾
问题已解决:1、在生成java文件的时候,java文件路径不正确;我写的是:
String filename = System.getProperty("user.dir")+"/com/design/proxy/$Proxy0.java";但是我的编译器正式输出路径为:
String filena...
2018-04-24