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

手机网站模板开发工具安徽省建设工程信息网站6

手机网站模板开发工具,安徽省建设工程信息网站6,个人如何制作微信小程序,重庆企业做网站多少钱spring知识回顾 spring的两个重要功能#xff1a;IOC、AOP#xff0c;在ioc容器的初始化过程中#xff0c;会触发2种处理器的调用#xff0c; 前置处理器(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) 在上面的简单使用的第一步中有继承成DynamicMethodMatcherPointcutDyNamicMethodMatcherPointcut同时也是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.pierceye.com/news/701485/

相关文章:

  • 建网站维护需要多少钱网站怎么做单页
  • 做纱线的网站wordpress创建页面地址设置
  • 怎么做多个网站单点登录flash网站读条怎么做
  • 网站建设免费的做网站一个人可以吗
  • 网站建设公司价格差别西安网站建设winkuo
  • 途牛网站建设株洲网站优化
  • 网站聊天怎么做网站数据库连接错误
  • 株洲网站优化哪家强网页动态设计
  • 百度是什么网站培训中心网站建设论文
  • 自己做的网站如何管理线上推广是做什么的
  • 关键字挖掘爱站网xampp配置多网站
  • 做社交网站搭建网站的步骤
  • 外围网站做代理关于网站建设需要的研究方法
  • 成都网站建设赢展怎样建设尧都水果网站
  • 网站建设英文文献佛山外贸网站推广
  • wordpress 网站显示ip哪里可以建网站
  • 网站是干嘛用的凡科教育
  • 黄页营销网站南京哪些公司做网站
  • 俄语网站推广工程公司名称大全
  • 怎么知道网站是php什么是网站推广?
  • 温州在线课堂番禺网站建设优化
  • php怎么做网站快大都会app下载最新版本
  • 麻城网站建设公司网络推广公司挣钱吗
  • t型布局网站的样子自己做的网站如何上传
  • 排版设计模板网站百度搜索下载安装
  • 网站页面建设需要ps吗网站建设结单 优帮云
  • 网站建设对我有什么好处网站首页被k 做跳转
  • 美辰网站建设网站建设公司转型做什
  • 创意网站界面怎么查注册公司的名字可不可以用
  • 微友说是做网站维护让帮忙投注中小企业经营管理培训班