为了账号安全,请及时绑定邮箱和手机立即绑定

模式的秘密---代理模式

难度中级
时长 2小时 0分
学习人数
综合评分9.70
184人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.7 逻辑清晰
  • 动态代理
    查看全部
  • 动态代理类的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等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
    0 采集 收起 来源:课程总结

    2016-08-26

  • 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
提交
取消
课程须知
本课程是 Java 开发课程的高级课程,希望各位小伙伴们在学习本课程之前,了解以下内容: 1)初步具备面向对象的设计思维 2)了解多态概念 3)了解反射
老师告诉你能学到什么?
1、代理模式概念机分类 2、代理模式应用场景 3、掌握静态代理、动态代理运用 4、理解JDK动态代理实现原理

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!