当前位置: 首页 > news >正文

网站开发服务转包合同济南专业seo推广公司

网站开发服务转包合同,济南专业seo推广公司,做网站 证书 浏览器,有哪些做高考模拟卷的网站我的JDK动态代理流程 我梳理的动态代理流程大约是: 如果每一个框架都有自己的BPP,且自己的BPP中都有自己的wrapIfNecessory,那样可能就是一个BPP一个代理类。但通常应该都是各自的框架以提供 Advisior(切面)的方式&am…

我的JDK动态代理流程

我梳理的动态代理流程大约是:

  1. 如果每一个框架都有自己的BPP,且自己的BPP中都有自己的wrapIfNecessory,那样可能就是一个BPP一个代理类。但通常应该都是各自的框架以提供 Advisior(切面)的方式,让AOP的BPP去处理他们的Advisior。

  2. BeanPostProcessor 处理bean的时候,会找到这个bean匹配上的的advisior(切面)的集合。

  3. ProxyFactory 拿到adivisor的集合和目标类之后

    1. 设置当前代理的 advicisor、设置当前代理的目标对象 targetClass,设置当前代理的接口类
    2. 使用Jdk或者cglib动态代理创建代理类createAopProxy().getProxy();​​
  4. 生成代理类:

    1. JDK动态代理

      1. JDK动态代理要求被代理类必须实现方法,否则报错。原因当然和JDK动态代理的原理有关系了。

        public Object getProxy(@Nullable ClassLoader classLoader) {return Proxy.newProxyInstance(classLoader, this.proxiedInterfaces, this);
        }
        
      2. 生成代理类,

        public Class<?> apply(ClassLoader loader, Class<?>[] interfaces) {。。。byte[] proxyClassFile = ProxyGenerator.generateProxyClass(proxyName, interfaces, accessFlags);。。。
        }
        
      3. 生成代理类

        1. 将所有方法包装成ProxyMethod对象

          1. 将Object类中的hashCode、equals、toString方法包装成ProxyMethod对象
          2. 获取代理类接口列表
          3. 遍历每个接口的每个方法,并包装成ProxyMethod对象
        2. 为代理类组装各种字段信息和方法信息

          1. 添加构造器方法,该构造器参数为InvocationHandler类型
          2. 添加静态字段及代理方法
          3. 添加静态字段的初始化方法
        3. 写入class文件

          1. 验证常量池中存在代理类的全限定名
          2. 验证常量池中存在代理类父类的全限定名,即Proxy类
          3. 验证常量池中存在代理类接口的全限定名
          4. 写入class文件前,将常量池设为只读,当前常量池中的变量不允许修改
          5. 每个class文件的前四个字节为魔数,用来确定这个文件是否是一个能被虚拟机接受的class文件,
          6. 后面再跟两个字节的次版本号和两个字节的主版本号
          7. 。。。
          8. 转成二进制文件输出
  5. 在调用代理对象方法时,会在方法内执行super.h.invoke(this, m3, new Object[]{var1});​​。即调用JdkDynamicAopProxy的invoke方法。

    final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializable {// 这里传的是thispublic Object getProxy(@Nullable ClassLoader classLoader) {if (logger.isTraceEnabled()) {logger.trace("Creating JDK dynamic proxy: " + this.advised.getTargetSource());}return Proxy.newProxyInstance(classLoader, this.proxiedInterfaces, this);}
    }public class Proxy implements java.io.Serializable {// super.h = new JdkDynamicAopProxy();protected InvocationHandler h;public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)}public final String getUserByName(String var1) throws  {/***   调用父类的h属性的invoke方法*/return (String)super.h.invoke(this, m3, new Object[]{var1});}
    }
    
  6. JdkDynamicAopProxy的invoke方法

    1. 获取​MethodInterceptor​集合 chain:List<Object> chain = this.advised.getInterceptorsAndDynamicInterceptionAdvice(method, targetClass);​​

    2. 对于拦截器链为空的情况,会直接执行目标方法

    3. 对于拦截器链不为空的情况,会将代理对象、目标方法、拦截器链等信息,封装为一个 ReflectiveMethodInvocation 对象,然后通过它的proceed​​方法完成拦截器中的增强逻辑和目标方法的执行。

      1. MethodInvocation invocation = new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain);​​
      2. 调用方法retVal = invocation.proceed();​​
http://www.dinnco.com/news/45155.html

相关文章:

  • 食品网站建设方案软文营销的作用有哪些
  • 武汉高端网站定制设计深圳专业seo
  • 网站建设发票内容深圳高端网站制作公司
  • 专用主机方式建设网站搜索引擎优化策略有哪些
  • 做产品网站多少钱百度怎么推广网站
  • 北京做网站的大公司企业网站首页
  • 网站建设平台ui确认书上海百度研发中心
  • 菏泽网站建设优惠臻动传媒模板建站和开发网站区别
  • 自己做一元购网站短期培训学什么好
  • 网站设计制作软文广告发布平台
  • 学校如何建网站seo系统教程
  • 中国菲律宾大使馆电话号码seo网站管理招聘
  • 美国网站的域名简述提升关键词排名的方法
  • 办网站需要备案吗中国十大流量网站
  • ppt模板清新淡雅免费下载网站seo优化技巧
  • 做的比较好的二手交易网站优化公司网站排名
  • 如何做求婚网站杭州网站设计制作
  • 南阳卧龙区高端网站建设价格semi
  • 微店那样的网站怎么做哪家网络推广好
  • 想要黑掉一个网站 要怎么做培训seo去哪家机构最好
  • 国外那些网站是做菠菜的app推广方式
  • 广州市做网站的软文推广公司有哪些
  • 深圳电商网络网站建设企业如何进行网络推广
  • 网站建设教程数据库网站推广软件哪个好
  • 网站优化建设上海网站推广策划方案
  • 政府网站建设指导西安百度关键词优化
  • 上海市企业服务云信息流优化师职业规划
  • 做网站4000-262-263google官网下载安装
  • 网站框架搭建设计怎么创建自己的网址
  • 网站优化难吗成都谷歌seo