zoukankan      html  css  js  c++  java
  • 设计模式之代理模式笔记(三)

        原文地址:点我

      关键点:

    静态代理:

      实现被代理类的接口

      构造注入 

    动态代理

    reflect  高级码农必须深入理解的

    扩展知识点 class.forname 使用这个不会产生新的实例, 只是为了加载 链接 初始化(静态) 

        我们大家一直用的spring 其中强大的功能aop就是基于这

    注意点:

      动态代理有个强制性要求 被代理的类必须时间了某一个接口, 或者本身就是接口(这个接口的实现类非必要)

     三步骤 

      构造注入

      实现invoke

      获取代理实例 参数 类加载器 class对象的数组 当前对象

    接口如果没有实现直接使用method.invoke()会报以下错误,

      IllegalArgumentException: object is not an instance of declaring class

    就是意译

      文中指出可以突破这种限制

      大意就是用注入的对象获取该class对象所表示的类或者接口指定已声明的方面, 

      其中需要注意的是setAccessible() 设置值 也就是被private修饰的成员变量或者方法是否可以被调用

    值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
     
     源码解析 代理对象的获取 Proxy.newProxyInstance(类加载器,对象集合,代理对象)

    对象的获取:
      getProxyClass(加载器, 接口集合)

        版本1.7  

            ①65535长度限制  

            ②expungeStaleEntries() 删除陈旧的实类

            ③CacheKey.valueOf(key, refquce){知识点传送门}

       简单总结下 Java对象的强、软、弱和虚引用

         强引用: 强可及对象, A a =new A();

         软引用: A a =new A(); B b = new B(a); A a1 = b.getA();

         弱引用: 配合WeakReference 使用 一旦 软引用级别及以上的应用被赋值为null, 手动调用gc, 能够立即回收

         虚引用: PhantomReference, 形态虚设 , 其中的get方法是无法获取到地址的

        补充: q: 匿名类属于哪种引用? a:测试下来应该是属于弱引用, 是真实存在的, 类似的操作 , list.add(new A()); list.remove[index], System.gc(); 用完就回收了

           ④ConcurrentMap 线程安全的集合 使用的是子类hashmap   putIfAbsent 方法 类似 if(!map.containsKey(key)){return map.put(key,value)}else{ return map.get(key)}

       ⑤

        5.1supplier 生产者                              

        5.2.1如果不存在 创建工厂                         5.0.1如果生产存在, 但没有 value

        5.2.2对生存者赋值             5.0.2创建工厂

                             5.0.3 替换replace value 成功后对生产者赋值  否则 get

    生成的代理类 extend Proxy implements 代理的对象  

         其中就是调用invoke

  • 相关阅读:
    0-1性能测试需求分析
    1-10jmeter关联,正则表达式(待巩固)
    1-9jmeter集合点,并发操作
    1-8.jmeter设置断言(检查点)
    1-6jmeter性能测试基础
    泛型中的协变和逆变
    jsPlumb
    jQuery UI vs Kendo UI & jQuery Mobile vs Kendo UI Mobile
    31天重构
    Visual Studio 小工具
  • 原文地址:https://www.cnblogs.com/denghailei/p/6347669.html
Copyright © 2011-2022 走看看