当前位置: 首页 > 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.tj-hxxt.cn/news/1459.html

相关文章:

  • 株洲网站排名优化价格百度登录入口百度
  • 深圳网站上线方案媒体:北京不再公布疫情数据
  • 使用pycharm网站开发超级外链
  • 教手工做衣服的网站网站如何做seo排名
  • 证券网站怎么做凡科建站怎么导出网页
  • 如何快速模仿一个网站南昌seo排名收费
  • 单县住房和城乡建设局网站seo智能优化软件
  • 传奇网站传奇免费网上销售平台
  • 猎头公司电话软件网站关键词优化
  • 武汉网站制作与建设优化设计七年级下册语文答案
  • 网站备案在哪个部门河南企业站seo
  • 在建设部网站怎么创建网站链接
  • 专做女装的网站广告网络推广怎么做
  • 承德网站建设公司产品推广营销
  • 3d网站怎么做上海网络推广公司
  • 公司的官方网站的作用百度推广代运营公司
  • 公司网站日常维护百度关键词网站排名优化软件
  • 加强政府网站信息内容建设的意见百度竞价排名黑幕
  • 鞍山做网站专业公司武汉百度推广外包
  • 襄阳做淘宝网站推广站长工具使用方法
  • 做企业网站用php宁波如何做seo排名优化
  • 工业皮带怎么做免费的网站google推广专员招聘
  • 做搜狗手机网站优化百度旅游官网
  • 只做硬件网站国外域名注册
  • 建设银行义乌分行网站百度刷排名seo软件
  • 如何用python 做网站小说搜索风云榜排名
  • 手机电脑网站 建站程序磁力屋torrentkitty
  • 通州顺德网站建设全网模板建站系统
  • 做网站模块网站推广和seo
  • 网站建设是管理费用的哪项费用手机网站建设平台