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

手机怎么做网站教程最佳的搜索引擎

手机怎么做网站教程,最佳的搜索引擎,怎么买wordpress,wordpress 分类数量spring知识回顾 spring的两个重要功能:IOC、AOP,在ioc容器的初始化过程中,会触发2种处理器的调用, 前置处理器(BeanFactoryPostProcessor)后置处理器(BeanPostProcessor)。 前置处理器的调用时机是在容器基本创建完成时&#xff…

spring知识回顾

        spring的两个重要功能:IOC、AOP,在ioc容器的初始化过程中,会触发2种处理器的调用,

前置处理器(BeanFactoryPostProcessor)后置处理器(BeanPostProcessor)。

        前置处理器的调用时机是在容器基本创建完成时,可以往容器中添加各种的bean

        后置处理器的调用时机是在bean的初始化和实例化时调用,aop的功能就是基于该特性实现的

aop重要的类介绍

        org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator spring的aop实现的入口类

        org.springframework.aop.Pointcut  spring的aop的顶层切面接口

        org.aopalliance.aop.Advice   spring的aop的顶层通知接口

        org.springframework.aop.Advisor  aop的顶层接口,从语义上包含了:pointcut和advice

   aop的使用     

        如果在实际的工作中,需要做aop操作,可以基于spring的aop返回实现也可以基于AspectJ操作实现,前者是在运行时动态代理,后置是在编译阶段完成aop,这里只讨论spring的aop使用

       切面:

           spring提供了多种切面:静态切面、动态切面、注解切面、正则表达式切面等

      通知advice:

         spring提供了多种通知:BeforeAdvice、AfterAdvice

   动态方法判断aop使用:

        1  切面类继承 org.springframework.aop.support.DynamicMethodMatcherPointcut

        org.springframework.aop.support.DynamicMethodMatcherPointcut#getClassFilter方法根据业务条件重新判断

        org.springframework.aop.MethodMatcher#matches(java.lang.reflect.Method, java.lang.Class<?>, java.lang.Object...)方法在运行时根据传入的方法参数动态判断

        2 通知类实现org.aopalliance.intercept.MethodInterceptor

        org.aopalliance.intercept.MethodInterceptor#invoke方法根据实际情况编写执行代码

       3 组装org.springframework.aop.support.DefaultPointcutAdvisor

        将切面和通知类织入到Advisor中,同时把Advisor做为bean放入到spring的ioc容器即可

源码解析

        spring的aop的入口是在spring bean创建过程中由后置处理器完成的,入口类是:

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator,查看类的UML图如下:

由图可知:该类是一个BeanPostProcessor的子类,在bean被初始化时,会调用该类的两个方法:

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessBeforeInitialization

和org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessAfterInitialization

aop的入口就是在bean初始化后的调用:

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary方法如下图所示:

spring的aop涉及的精髓就在这2段代码中

 获取符合的Advisor。根据代码逻辑一路调试:org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator#findEligibleAdvisors

 其中第一步是获取所有的Advisor类,在第二步的时候通过beanClass筛选出符合条件的Advisor

最终的筛选逻辑在:org.springframework.aop.support.AopUtils#canApply(org.springframework.aop.Pointcut, java.lang.Class<?>, boolean)

  在上面的简单使用的第一步中,有继承成DynamicMethodMatcherPointcut,DyNamicMethodMatcherPointcut同时也是MethodMatcher的实现,在上图1处是对类判断是否满足条件,DynamicMethodMatcherPointcut此处对所有的类都会返回true,可以根据业务情况选择性的返回,提升性能

在2处获取的也是DynamicMethodMatcherPointcut本身,也是对所有的方法返回true

至此,通过DynamicMethodMatcherPointcut在bean初始化时寻找到合适的Advisor,下一步就是创建代理org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#createProxy

在1处传入的就是由上一个步骤查询到的合适的Advisor列表,2处做转换,3处就是正在的创建代理的逻辑,跟随代码一路调试。最终Aop的代理创建委托给了org.springframework.aop.framework.DefaultAopProxyFactory#createAopProxy

会根据bean的类型判断是采用Jdk动态代理还是cglib动态代理完成。后面bean的执行逻辑就是代理的相关方法逻辑了。

至此,Aop的创建过程梳理完成

大家最关心的其实是动态代理的执行逻辑。这里暂时先以JDK的动态代理为列分析源码流程

后续的代码分析如下:

org.springframework.aop.framework.JdkDynamicAopProxy的类UML图如下:

真正的执行逻辑应该是org.springframework.aop.framework.JdkDynamicAopProxy#invoke方法

前面的方法是做一些固定方法判断,包括:equal、hashcode等,核心方法如截图所示

在1处获取调用该方法的拦截链,最终的实现委托给了:org.springframework.aop.framework.DefaultAdvisorChainFactory#getInterceptorsAndDynamicInterceptionAdvice

在代码1处,获取该方法对应类的Advisor列表,在2处通过org.springframework.aop.support.DynamicMethodMatcher#matches方法判断,此处恒为true,在3处就是区别DynamicMethodmatcherPointcut和StaticMethodmatcherPointcut的地方,动态的此处为true,而StaticMethodMatcherPointcut为false。最终返回的是通知类Advice(MethodInterceptor是Advice的子类)

回到org.springframework.aop.framework.JdkDynamicAopProxy#invoke的第二步,当通知不为空时,通过构造了一个ReflectiveMethodInvocation对象,再调用org.springframework.aop.framework.ReflectiveMethodInvocation#proceed方法返回结果

跟踪代码到org.springframework.aop.framework.ReflectiveMethodInvocation#proceed

在构造器中,传入了拦截器链,在真正实行时,通过链路调用完成

至此Aop的创建实现和执行逻辑已经梳理清楚,总结如下:

代理创建逻辑:

  1 AbstractAutoProxyCreator是一个BeanPostProcessor,在bean初始化时会触发

postProcessAfterInitialization方法的调用

2  org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary方法通过bean的类类型寻找到对应的通知类Advisor

3 代理的创建委托给了org.springframework.aop.framework.DefaultAopProxyFactory#createAopProxy方法实现,通过判断bean的条件采用JDK或者cglib的动态代理方式实现

JDK代理实现逻辑如下:

当执行方法时,通过代理,

1 调org.springframework.aop.framework.JdkDynamicAopProxy#invoke方法。

2 该方法通过获取调用方法对应的通知信息,然后构建一个ReflectiveMethodInvocation实例,最终调用委托给了ReflectiveMethodInvocation#proceed方法

3 ReflectiveMethodInvocation#proceed方法调用通知链的所有拦截器方法

以上就是Aop的创建和代理执行全逻辑

http://www.hkea.cn/news/576965/

相关文章:

  • 高端网站开发设计站长之家字体
  • 免费网站建站工具购买域名的网站
  • 淘宝联盟怎么做网站百度网站提交
  • 前端做用vue做后台多还是做网站多青岛网站快速排名优化
  • 岳阳网站开发公司海淀区seo多少钱
  • 2017年做网站维护总结百度搜索软件
  • 南京网站建设公司点击器原理
  • 网站怎么编辑搜狗网站提交入口
  • 自建网站做外贸的流程广告推广方式
  • 警告欺骗网站模板免费注册
  • 获取网站访客信息seo分析师招聘
  • 制作网页的网站有哪些网站建设
  • 日本真人做爰无遮挡视频免费网站嘉兴关键词优化报价
  • 忻州市中小企业局网站贵州整站优化seo平台
  • 网页怎么制作超链接seo兼职接单平台
  • 网站建设中应注意哪些问题重庆整站seo
  • 贵阳网站建设哪家便宜微商软文范例大全100
  • 怎么在微信上做网站竞价交易
  • wordpress优化版4.7.4网站seo设计
  • 网上课程网站精准客户数据采集软件
  • 专业网站建设报价外呼系统电销
  • 网站建设公司价格差别seo还有哪些方面的优化
  • 哪家公司建造了迪士尼乐园关键词优化推广排名多少钱
  • 做教育的网站有哪些内容吗湖南网站营销推广
  • wordpress 跳过ftp搜索引擎排名优化方案
  • 360做的网站北京营销推广公司
  • 我国政府网站建设的趋势宁波seo公司排名榜
  • 高端网站建设,恩愉科技专业的seo搜索引擎优化培训
  • 跨境网站开发公司网站seo思路
  • 冠县网站建设活动推广方案