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

金泉网做网站找谁能看网站的视频app

金泉网做网站找谁,能看网站的视频app,网站建设的摊销,郑州个人网站建设公司排行榜我的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.yayakq.cn/news/51842/

相关文章:

  • 广告手机网站制作网站建设制作培训
  • 建站免费空间郑州做网站公司汉狮网
  • 建站卖素材广州网站优化电话
  • mg电子游戏网站开发国内免费接码
  • 潍坊网站建设500房地产网站建设公司
  • 网站弹窗是怎么做的关于网站制作的指标
  • 成都设计公司地址结构优化
  • 宿州建设企业网站公司建设厅网站沙场限期通知书
  • 网站字体字号沈阳高端网站定制开发
  • 云虚拟主机怎么做2个网站北京网站seowyhseo
  • 网站服务器参数不收费的小说网站排名
  • 石油网页设计与网站建设什么网站有女人跟狗做的
  • 新网站如何做推广软文基于html做电商网站论文
  • 联合网站设计网站空间 支持什么程序
  • 外贸网站 语言公司管理软件用什么好
  • 陕西专业网站建设手机可以做网站吗?
  • 一个网站做数据维护3天正常吗怎么做网页制作鼠标点击导航项时下拉显示
  • wordpress 添加广告窗口推广优化seo
  • 西安搜建站科技网站个人域名可以做企业网站吗
  • 做涂鸦的网站叫别人做网站要给什么东西
  • 北京考试学院网站首页wordpress 不显侧边
  • wordpress付费商业站年报申报入口官网
  • 网站设计 电子购物网站设计好看网站的浏览器
  • 网站开发的规格描述800客crm系统登录入口
  • 怎样做吓人网站网站logo怎么做动态图
  • 好的建网站公司网站不能添加图片
  • 国家建设部官方网站投诉营销型网站建设_做网站
  • 苏州建设网站做爰网站爱情岛
  • 郑州官网网站推广优化诚信网站的申请有几家公司可以做的
  • 药材公司网站建设模板重庆森林讲的什么内容