1、创建的代理类首先要实现 InvocationHandler(java.lang.reflect.InvocationHandler)、然后处理实现其中invoke()方法; 2、代理类中提供一个返回类型是Object、创建代理实例的方法(传入目标类 Object userService)供client调用,该方法return Proxy.newProxyInstance(args1,args2,args3); args1:设置代码使用的类加载器,一般采用和目标类相同的加载器(this.userService.getClass().getClassLoader()); args2:跟目标类相同的接口(this.userService.getClass().getInterFaces()); args3:设置回调对象,当代理对象的方法被调用时会调用该参数指定对象的方法(this);即 invoke方法 invoke(Object proxy, Method method, Object[] args)分别对应代理类对象,可以访问目标对象的操作,可以传递到目标对象的参数; 3、通过invoke 中的method访问目标对象,method.invoke(Object,args); 分别对应目标对象,传给目标对象的参数 4、client端创建目标对象,代理实例,调用代理类中的创建实例方法; RealClass rc = new RealClass(); //创建真实对象 JdkProxy jdkProxy = new JdkProxy();//创建代理类 RealClass proxyClass = RealClass)jdkProxy.createNewProxyInstatce(userService); //把真实类传递给代理实例 proxyClass.save("");//调用目标类中的save方法
5、可以在代理中添加比如安全检查等方法,或业务逻辑