-
动态代理查看全部
-
动态代理类的Proxy查看全部
-
动态代理的InvocationHandler接口查看全部
-
两种代理方式 ,继承和聚合查看全部
-
静态代理的概念查看全部
-
常用的代理模式查看全部
-
代理模式分类: 1、远程代理(Remote Proxy)——为不同地理的对象提供局域网代表对象。(类似于客户端和服务器端) 2、虚拟代理(Virtual Proxy)——根据需要将资源消耗很大的对象进行延迟,真正需要的时候才进行创建。(网页中图片的加载,先用一张虚拟的图片进行显示,等图片加载完成后再进行显示) 3、保护代理(Protect Proxy)——控制用户的访问权限。(发帖功能) 4、智能引用代理(Smart Reference Proxy)——提供对目标对象一些额外的服务。(火车站代售处为火车站代理)查看全部
-
动态代理实现思路查看全部
-
//需要编译的java文件 String filename = System.getProperty("user.dir")+"/bin/com/imooc/proxy/$Proxy0.java"; //编译 //拿到编译器 JavaCompiler complier = ToolProvider.getSystemJavaCompiler(); //文件管理者 StandardJavaFileManager fileMgr = complier.getStandardFileManager(null, null, null); //获取文件 Iterable units = fileMgr.getJavaFileObjects(filename); //编译任务 CompilationTask t = complier.getTask(null, fileMgr, null, null, null, units); //进行编译 t.call(); fileMgr.close(); //load 到内存 ClassLoader cl = ClassLoader.getSystemClassLoader(); //从内存中获取要处理的类 Class c = cl.loadClass("com.imooc.proxy.$Proxy0"); //给此类的构造方法传入参数 Constructor ctr = c.getConstructor(InvocationHandler.class); //调用对象的方法 return ctr.newInstance(h);查看全部
-
proxy查看全部
-
jdk动态代理查看全部
-
动态代理实现步骤查看全部
-
JDK动态代理可以对任何类,任何方法提供代理,其中智能引用代理最为广泛使用。 JDK动态代理实现思路: 实现功能:通过Proxy的newProxyInstance方法返回代理对象。 1. 声明一段源码(动态产生代理); 2. 编译源码(JDK Compiler API),产生新的类(代理类); 3. 将这个类 load 到内存当中,产生一个新的对象(代理对象); 4. return 代理对象。 小技巧:如果(双引号)字符串里面还有(双引号)字符串,则里面的字符串(双引号)需要转义“\”。 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
JDK自从1.3版本开始,就引入了动态代理,JDK的动态代理用起来非常简单,但是它有一个限制,就是使用动态代理的对象必须实现一个或多个接口 。如果想代理没有实现接口的类可以使用CGLIB包。 CGLIB(Code Generation Library)是一个开源项目。是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate用它来实现PO(Persistent Object 持久化对象)字节码的动态生成。 注意:CGLIB不能对“final”修饰的类进行代理。 相关代码——(下): @CglibProxy.java public class CglibProxy implements MethodInterceptor { private Enhancer enhancer=new Enhancer(); public Object getProxy(Class cls){ //设置创建子类的类 enhancer.setSuperclass(cls); enhancer.setCallback(this); return enhancer.create(); } /** * 参数:object:拦截所有目标类方法的调用,method:目标方法的反射对象,args:方法的参数,methodproxy:代理类的实例。 */ public Object intercept(Object object, Method method, Object[] args, MethodProxy methodproxy) throws Throwable { syso("日志开始..."); methodproxy.invokeSuper(object, args); syso("日志结束..."); return null; } } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
-
相关代码——(上): @Client.java public class Client { public static void main(String[] args) { CglibProxy proxy=new CglibProxy(); Train t=(Train) proxy.getProxy(Train.class); t.move(); /** * 执行顺序(类似JDK动态代理):从proxy.getProxy(Train.class);后,开始先执行CglibProxy类的getProxy()方法, * 再返回到t.move();后,接着执行CglibProxy类的intercept()方法,等到methodproxy.invokeSuper();则执行Train类中的move()方法, * 然后返回到methodproxy.invokeSuper();下一句直到最后,再接着返回到Client类,完毕。 */ } } @Train.java public class Train { public void move(){ System.out.println("火车行驶中..."); } } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】查看全部
举报
0/150
提交
取消