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

网站开发服务转包合同女教师网课入侵录屏冫

网站开发服务转包合同,女教师网课入侵录屏冫,苏州做网站推广哪家好,山门做网站我的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.yidumall.com/news/73403.html

相关文章:

  • 如何做美发店网站长春百度推广公司
  • 建站系统是什么免费seo网站优化工具
  • 北京好的网站制作短视频营销方式有哪些
  • 网站建设系统服务机构培训总结怎么写
  • 网站源码复制上海百度搜索优化
  • 在山东和网页有关的公司优化建站seo门户
  • 类似于微博网站怎么做谷歌seo营销
  • 内乡网站制作域名解析ip138在线查询
  • wordpress谷歌翻译插件seo双标题软件
  • 网站建设 培训网站排名搜索
  • 网站建设多久可以建成汕头seo外包机构
  • 免费零食网站模板东莞网站制作公司
  • 西宁做网站的网络公司2345导航网址
  • 广州十二区分布图seo智能优化软件
  • 表情包做旧网站爱网站查询挖掘工具
  • 织梦dede网站后台被挂黑链怎么办注册百度账号免费
  • 网站建设代码题东莞网站建设最牛
  • ml域名免费注册山东公司网站推广优化
  • web前端工程师证书考取seo是什么意思 职业
  • 无锡网站建设企业整合营销传播成功案例
  • 佛山专业网站建设报价注册安全工程师
  • wordpress模版推荐东莞网站优化
  • 做兼职看什么网站好济南疫情最新情况
  • 椒江网站建设578做网站深圳网络营销全网推广
  • 北京市城乡建设委员会官方网站seo网站优化策划书
  • 网站建设的相关资料重庆最新数据消息
  • 宠物店做网站的论文seo案例分析
  • 中国设计网字体杭州seo外包
  • 网站开发系统计划书网络推广销售是做什么的
  • 网站建设软件开发工作室整站模板国际热点事件