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

企业做网站用dedeCMS免费吗asp网站报错信息

企业做网站用dedeCMS免费吗,asp网站报错信息,聊城做网站的公司行情,建设系统网站首页ProxyFactory选择cglib或jdk动态代理原理 ProxyFactory在生成代理对象之前需要决定到底是使用JDK动态代理还是CGLIB技术: 代理对象创建过程 JdkDynamicAopProxy 在构造JdkDynamicAopProxy对象时,会先拿到被代理对象自己所实现的接口,并且…

ProxyFactory选择cglib或jdk动态代理原理

ProxyFactory在生成代理对象之前需要决定到底是使用JDK动态代理还是CGLIB技术:

代理对象创建过程

JdkDynamicAopProxy

  1. 在构造JdkDynamicAopProxy对象时,会先拿到被代理对象自己所实现的接口,并且额外的增加SpringProxy、Advised、DecoratingProxy三个接口,组合成一个Class[],并赋值给proxiedInterfaces属性
  2. 并且检查这些接口中是否定义了equals()、hashcode()方法
  3. 执行Proxy.newProxyInstance(classLoader, this.proxiedInterfaces, this),得到代理对象,JdkDynamicAopProxy作为InvocationHandler,代理对象在执行某个方法时,会进入到JdkDynamicAopProxy的**invoke()**方法中

ObjenesisCglibAopProxy

  1. 创建Enhancer对象
  2. 设置Enhancer的superClass为通过ProxyFactory.setTarget()所设置的对象的类
  3. 设置Enhancer的interfaces为通过ProxyFactory.addInterface()所添加的接口,以及SpringProxy、Advised、DecoratingProxy接口
  4. 设置Enhancer的Callbacks为DynamicAdvisedInterceptor
  5. 最后创建一个代理对象,代理对象在执行某个方法时,会进入到DynamicAdvisedInterceptor的intercept()方法中

代理对象执行过程

  1. 在使用ProxyFactory创建代理对象之前,需要往ProxyFactory先添加Advisor
  2. 代理对象在执行某个方法时,会把ProxyFactory中的Advisor拿出来和当前正在执行的方法进行匹配筛选
  3. 把和方法所匹配的Advisor适配成MethodInterceptor
  4. 把和当前方法匹配的MethodInterceptor链,以及被代理对象、代理对象、代理类、当前Method对象、方法参数封装为MethodInvocation对象
  5. 调用MethodInvocation的proceed()方法,开始执行各个MethodInterceptor以及被代理对象的对应方法
  6. 按顺序调用每个MethodInterceptor的invoke()方法,并且会把MethodInvocation对象传入invoke()方法
  7. 直到执行完最后一个MethodInterceptor了,就会调用invokeJoinpoint()方法,从而执行被代理对象的当前方法

各注解对应的MethodInterceptor

  • @Before对应的是AspectJMethodBeforeAdvice,在进行动态代理时会把AspectJMethodBeforeAdvice转成MethodBeforeAdviceInterceptor先执行advice对应的方法再执行MethodInvocation的proceed(),会执行下一个Interceptor,如果没有下一个Interceptor了,会执行target对应的方法
  • @After对应的是AspectJAfterAdvice,直接实现了MethodInterceptor先执行MethodInvocation的proceed(),会执行下一个Interceptor,如果没有下一个Interceptor了,会执行target对应的方法再执行advice对应的方法
  • @Around对应的是AspectJAroundAdvice,直接实现了MethodInterceptor直接执行advice对应的方法,由@Around自己决定要不要继续往后面调用
  • @AfterThrowing对应的是AspectJAfterThrowingAdvice,直接实现了MethodInterceptor先执行MethodInvocation的proceed(),会执行下一个Interceptor,如果没有下一个Interceptor了,会执行target对应的方法如果上面抛了Throwable,那么则会执行advice对应的方法
  • @AfterReturning对应的是AspectJAfterReturningAdvice,在进行动态代理时会把AspectJAfterReturningAdvice转成AfterReturningAdviceInterceptor先执行MethodInvocation的proceed(),会执行下一个Interceptor,如果没有下一个Interceptor了,会执行target对应的方法执行上面的方法后得到最终的方法的返回值再执行Advice对应的方法

AbstractAdvisorAutoProxyCreator

这个注解主要就是往Spring容器中添加了一个AnnotationAwareAspectJAutoProxyCreator类型的Bean。

AspectJAwareAdvisorAutoProxyCreator继承了AbstractAdvisorAutoProxyCreator,重写了findCandidateAdvisors()方法,AbstractAdvisorAutoProxyCreator只能找到所有Advisor类型的Bean对象,但是AspectJAwareAdvisorAutoProxyCreator除开可以找到所有Advisor类型的Bean对象,还能把@Aspect注解所标注的Bean中的@Before等注解及方法进行解析,并生成对应的Advisor对象。

所以,我们可以理解@EnableAspectJAutoProxy,其实就是像Spring容器中添加了一个AbstractAdvisorAutoProxyCreator类型的Bean,从而开启了AOP,并且还会解析@Before等注解生成Advisor。

Spring中AOP原理流程图

Spring中AOP底层原理| ProcessOn免费在线作图,在线流程图,在线思维导图

 

http://www.yayakq.cn/news/483914/

相关文章:

  • 企业宣传片脚本湖南seo
  • 公司做网站 需要解决哪些问题wordpress整站迁移出现403
  • 昆明招聘网站建设普工小工亿网正品
  • 电子商务网站建设考试题写作网站保底和全勤的区别
  • 网站虚拟主机内存不足能不能链接天津重型网站建设风格
  • 盐城做网站企业建设网站开发方案
  • 昆明建设银行纪念币预约网站网站导航包括
  • 免费的行情网站推荐下载安装ui设计app界面图片
  • 上海单位建设报建网站常德网站建设开发哪家好
  • 网站制作需要什么知识在线网页刷新
  • 外链建设对网站的影响网站开发基于什么平台
  • wordpress站外连接wordpress密码
  • 免费网站建设可信赖织梦cms做网站流程
  • 中国建设执业资格注册中心网站wordpress切换城市插件
  • 即墨城乡建设局网站仙居网站建设
  • 中山网站模板品牌建设公司排名
  • 京东网站是哪个公司做的电子商务是干什么的工资一般多少
  • 兴化住房和城乡建设局网站微信长图的免费模板网站
  • 做门户网站的网络公司编写微信小程序用什么软件
  • 云彩网站广西桂林天气
  • 站点和网页的关系网站开发公司 郑州
  • 模板网站zencarthtml做的宠物网站
  • 杭州建设厅网站整站建设 想做一个外卖网站
  • 网站优化是什么做ppt网站有哪些内容
  • 网站路径怎么做怎么增加网站首页权重
  • 北京专业网站制作服务如何做国外网站的镜像
  • 网站建设费用构成wordpress本地添加图片不显示图片
  • 建站公司佛山千里做他千百度网站
  • 转播网站如何做中国建筑装饰网站
  • 怎么做电脑网站后台公司网站在国外打开很慢使用cdn好还是国外租用服务器好