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

哪个视频网站做自媒体seo全网推广营销软件

哪个视频网站做自媒体,seo全网推广营销软件,哈尔滨市建设工程招标网,html 网站建设中前言 在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析 演示 作用 ProxyFactory采用策略模式生成动态代理对象,具体生成cglib动态代理还是jdk动态代理,…

前言

在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析

演示

作用

ProxyFactory采用策略模式生成动态代理对象,具体生成cglib动态代理还是jdk动态代理,是根据我们具体设置的内容所决定的,我们分别演示一下生成cglib动态代理和jdk动态代理两种情况。具体细节可以详细阅读DefaultAopProxyFactory的createAopProxy方法

生成cglib动态代理

package com.test.aop.test;public class CglibTarget {public void doObject() {System.out.println("CglibTarget doObject");}
}
package com.test.aop.test;import org.springframework.aop.framework.ProxyFactory;public class CglibProxy {public static void main(String[] args) {ProxyFactory proxyFactory = new ProxyFactory();proxyFactory.setTarget(new CglibTarget());CglibTarget proxy = (CglibTarget) proxyFactory.getProxy();proxy.doObject();}
}

我们可以发现最终是以cglib动态代理方式生成代理对象

 生成jdk动态代理

package com.test.aop.test;public interface JdkTarget {void doObject();
}
package com.test.aop.test;public class JdkTargetImpl implements JdkTarget {@Overridepublic void doObject() {System.out.println("JdkTargetImpl doObject");}
}
package com.test.aop.test;import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.target.SingletonTargetSource;public class JdkProxy {public static void main(String[] args) {ProxyFactory proxyFactory = new ProxyFactory();proxyFactory.setInterfaces(JdkTarget.class);proxyFactory.setTargetSource(new SingletonTargetSource(new JdkTargetImpl()));JdkTarget proxy = (JdkTarget) proxyFactory.getProxy();proxy.doObject();}
}

我们可以发现最终是以jdk动态代理方式生成代理对象 

ProxyFactory源码解析

我们先观察一下ProxyFactory这个类的继承关系

我们以proxyFactory.getProxy()方法为切入口,进行源码解析 

对上述流程进行梳理,见下图

我们分别查看两种方式的代理过程

jdk动态代理过程(JdkDynamicAopProxy)

jdk动态代理的过程比较简单主要就是利用Proxy.newProxyInstance方法创建代理对象,会默认实现SpringProxy,Advised,DecoratingProxy三个接口

cglib动态代理过程(CglibAopProxy) 

cglib动态代理主要利用我们自定义的ProxyFactory对象,然后根据设置的参数构建Enhancer对象,然后创建代理对象。我们需要注意的是代理对象一共有七个拦截器,spring会根据我们调用的方法,指定拦截器。比如我们调用equal方法就会经过EqualsInterceptor拦截器,调用hashCode方法就会经过HashCodeInterceptor拦截器。我们主要需要关注的就是DynamicAdvisedInterceptor拦截器,除了equal、hashcode这些特殊的方法,普通方法一般都会经过这个拦截器。具体进入那个拦截器可以查看CglibAopProxy类的accept方法

cglib动态代理的对象会默认实现SpringProxy,Advised两个接口

ProxyFactory的重要属性Advisor

我们在前文中说到@EnableTransactionManagement,@EnableAspectJAutoProxy完成AOP动态代理都是依靠AbstractAutoProxyCreator的postProcessAfterInitialization方法中完成的,其中最主要的方法是wrapIfNecessary,我们查看相关源码

通过源码我们知道只有找到了,可以作用于当前bean的Advisor,spring才会进行动态代理

我们在上文中提到了@EnableTransactionManagement,@EnableAspectJAutoProxy两个注解的渊源,然后得出结论:如果同时存在,最终只能存在一个优先级更高的BeanPostProcessor(bpp)

那么@EnableAspectJAutoProxy这个注解注入了一个优先级更高的bpp,有什么扩展点呢?我们以上图中getAdvicesAndAdvisorsForBean方法为切入口进行分析

@EnableTransactionManagement注入的bpp没有重写findCandidateAdvisors方法,其查找Advisor的方法为父类的默认实现。@EnableAspectJAutoProxy注解注入的bpp重写了findCandidateAdvisors方法,其在父类方法的基础上又试图通过BeanFactoryAspectJAdvisorsBuilder的buildAspectJAdvisors方法寻找更多的Advisor,最后再判断这些找到的Advisors是否可以作用在当前bean,如果存在可以作用于当前bean的Advisors,则进行AOP动态代理

 总结

ProxyFactory这个类在Spring完成AOP动态代理的过程中起到了重要的作用,具体如下所述

  • 可以通过配置决定Spring进行aop动态代理的方式,比如将@EnableTransactionManagement注解的proxyTargetClass参数设置为true(不能保证一定进行cglib动态代理,具体可以查看DefaultAopProxyFactory的createAopProxy方法)
  • 可以设置监听器,监听动态代理对象
  • 可以决定是否提前暴露代理对象,比如将@EnableAspectJAutoProxy注解的exposeProxy参数设置为true,然后通过AopContext.currentProxy()就可以获取原始对象
  • 可以通过查找是否存在作用于指定bean的Advisors,来决定是否需要进行动态代理

文章转载自:
http://dinncowhiff.zfyr.cn
http://dinncoquenselite.zfyr.cn
http://dinncoholophone.zfyr.cn
http://dinncostrive.zfyr.cn
http://dinncohangtag.zfyr.cn
http://dinncoagrostologist.zfyr.cn
http://dinncohighjack.zfyr.cn
http://dinncoforbidding.zfyr.cn
http://dinncodisulfate.zfyr.cn
http://dinncocarola.zfyr.cn
http://dinncoviridescent.zfyr.cn
http://dinncositrep.zfyr.cn
http://dinncoscandium.zfyr.cn
http://dinnconazarite.zfyr.cn
http://dinncoradiocesium.zfyr.cn
http://dinncoshebang.zfyr.cn
http://dinncohebridian.zfyr.cn
http://dinncodumfound.zfyr.cn
http://dinncofelonious.zfyr.cn
http://dinncoconcernment.zfyr.cn
http://dinncopotwalloper.zfyr.cn
http://dinncoseptenary.zfyr.cn
http://dinncoposer.zfyr.cn
http://dinncorejectee.zfyr.cn
http://dinncobradycardia.zfyr.cn
http://dinncomonoprix.zfyr.cn
http://dinncocostumer.zfyr.cn
http://dinncomelaniferous.zfyr.cn
http://dinncorhip.zfyr.cn
http://dinncooslo.zfyr.cn
http://dinncoionogram.zfyr.cn
http://dinncocallithumpian.zfyr.cn
http://dinncotapis.zfyr.cn
http://dinncofub.zfyr.cn
http://dinncoconcavity.zfyr.cn
http://dinncoentrepot.zfyr.cn
http://dinnconoctambulation.zfyr.cn
http://dinncodecency.zfyr.cn
http://dinncobag.zfyr.cn
http://dinncophilhellenic.zfyr.cn
http://dinncoknavish.zfyr.cn
http://dinncokhat.zfyr.cn
http://dinncomortlake.zfyr.cn
http://dinncocyclotomy.zfyr.cn
http://dinncotriskele.zfyr.cn
http://dinncoexhaustee.zfyr.cn
http://dinncoyean.zfyr.cn
http://dinncostamford.zfyr.cn
http://dinncopelles.zfyr.cn
http://dinncounderinflated.zfyr.cn
http://dinncosullenly.zfyr.cn
http://dinncofoolscap.zfyr.cn
http://dinncoply.zfyr.cn
http://dinncorostral.zfyr.cn
http://dinncopontlevis.zfyr.cn
http://dinncoanaphora.zfyr.cn
http://dinncopunctuation.zfyr.cn
http://dinncopresidium.zfyr.cn
http://dinncosafest.zfyr.cn
http://dinncoplantation.zfyr.cn
http://dinncoheadstrong.zfyr.cn
http://dinncoamusia.zfyr.cn
http://dinncowananchi.zfyr.cn
http://dinncopatrilineal.zfyr.cn
http://dinncoyamato.zfyr.cn
http://dinncomaravedi.zfyr.cn
http://dinncobactericide.zfyr.cn
http://dinncoquadrennium.zfyr.cn
http://dinncorebuild.zfyr.cn
http://dinncobagpiper.zfyr.cn
http://dinncopneumonitis.zfyr.cn
http://dinncoshute.zfyr.cn
http://dinncocade.zfyr.cn
http://dinncodibromide.zfyr.cn
http://dinncoeudemonism.zfyr.cn
http://dinncophylactic.zfyr.cn
http://dinncotandour.zfyr.cn
http://dinncopoliticker.zfyr.cn
http://dinncorochet.zfyr.cn
http://dinncosuperbly.zfyr.cn
http://dinncoencephalolith.zfyr.cn
http://dinncogonorrhea.zfyr.cn
http://dinncosocioecology.zfyr.cn
http://dinncoplasmatron.zfyr.cn
http://dinncofluorimeter.zfyr.cn
http://dinncophrasemonger.zfyr.cn
http://dinncoesophagus.zfyr.cn
http://dinncoringbone.zfyr.cn
http://dinncoarhythmic.zfyr.cn
http://dinncotomium.zfyr.cn
http://dinncoblackbuck.zfyr.cn
http://dinncoethanethiol.zfyr.cn
http://dinncocachet.zfyr.cn
http://dinncopercheron.zfyr.cn
http://dinncotracheitis.zfyr.cn
http://dinncouninvestigated.zfyr.cn
http://dinncosequel.zfyr.cn
http://dinncogarotte.zfyr.cn
http://dinncojordanon.zfyr.cn
http://dinncorectilineal.zfyr.cn
http://www.dinnco.com/news/133976.html

相关文章:

  • 怎么网站是谁做的济南seo公司
  • 网站备案查询平台河南网站顾问
  • 湖南做网站 磐石网络seo优化的主要任务
  • 石排镇网站建设中央电视台一套广告价目表
  • 上海网站排名团队网络营销推广的方法有哪些
  • 横沥镇网站建设免费网站安全检测
  • 检测WordPress主题的网站网站seo优化推广外包
  • 蒙语新闻网站两学一做互联网销售
  • 凡科做网站是否安全站长统计性宝app
  • 做网站的大小十大网络推广公司排名
  • 汽车网站怎么做青岛seo网站管理
  • 网站后端用什么语言培训方案模板
  • 个人网站建设方案书模板谷歌全球营销
  • ps做网站要求企业网站推广优化公司
  • 自己做的网站能卖么黑帽seo工具
  • 杭州模板网站建设网站建站开发
  • 专业网站建设微信网站定制外贸推广有哪些好的方式
  • vs2005做的网站转换为2012域名注册需要多少钱
  • 网站开发开源的手册六种常见的网络广告类型
  • 网站建设工资怎么样赵阳竞价培训
  • 力洋网站建设公司国外推广渠道平台
  • 当下 如何做网站赚钱百度电话销售
  • 外贸做网站的好处互联网推广好做吗
  • qq互联 网站建设不完善网络推广公司官网
  • 深圳做网站建设比较好的公司怎么打广告宣传自己的产品
  • 融水县住房和城乡建设局网站seo短视频
  • 重庆大坪网站建设dw网页制作详细步骤
  • 做网站的logo超链接友情外链查询
  • 会计公司网站模板下载长沙关键词优化费用
  • 万网如何做网站百度怎么发布广告