代码位置:com.interface21.aop 包下。
开始分析(扯):
1、代理的创建(按步骤):
首先,需要创建代理工厂,代理工厂需要 3 个重要的信息:数组,目标对象接口数组,目标对象。
在做seo优化的同时,我们首先就要先确认网站优化的最终seo目标,有了一个明确的目标才能更好的安排具体的工作。
在和客户商务谈判后就要客户确认网站优化的最终seo目标,有了一个明确的目标才能更好的安排具体的工作。
对于加了@transactional注解的方法来说,在调用代理类的方法时,会先通过transactioninterceptor开启事务,然后在调用目标类的方法,最后在调用结束后,transactioninterceptor 会提交或回滚事务,大致流程如下图:。
1947年1月,46团主攻焦家岭,连续冲锋七次,伤亡500余人,最终攻下目标,歼敌一个加强连。
当调用 getProxy 方法的时候,会根据接口数量大余 0 条件返回一个代理对象(JDK or Cglib)。
注意:创建代理对象时,同时会创建一个外层,这个就是 Spring 内核的。用于控制整个 AOP 的流程。
2、代理的调用

当对代理对象进行调用时,就会触发外层。
外层根据代理配置信息,创建内层链。创建的过程中,会根据表达式判断当前拦截是否匹配这个。而这个链设计模式就是职责链模式。
当整个链条执行到最后时,就会触发创建代理时那个尾部的默认,从而调用目标方法。最后返回。
题外话:Spring 的事务也就是个。
来张不是很标准的 UML 图:

关于调用过程,来张流程图:

大概就是这样子,具体更多的细节,请看源码,如果还不是很明白的话,请咨询本人,本人不确定这个图是否画的很浅显易懂 —— 最起码萌新看得懂才能称之为浅显易懂。
先来张图:

代码位置:com.interface21.web.servlet.DispatcherServlet#doService
(没错,就是 Spring 1.0 的代码,大道至简,现在的 Spring 经过 15 年的发展,已经太过臃肿,从学习角度来说,interface 21 是最好的代码,不接受反驳)
代码如下:
1.设置属性
//??1.??设置属性
//??Make??web??application??context??available
request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE,??getWebApplicationContext());
//??Make??locale??resolver??available
request.setAttribute(LOCALE_RESOLVER_ATTRIBUTE,??this.localeResolver);
//??Make??theme??resolver??available
request.setAttribute(THEME_RESOLVER_ATTRIBUTE,??this.themeResolver);
2.根据 Request 请求的 URL 得到对应的 handler 执行链,其实就是和 Controller 代理对象。

//??2.??找??handler??返回执行链
HandlerExecutionChain??mappedHandler??=??getHandler(request);
3.得到 handler 的适配器
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-89538-2.html
很爱很爱
浪费材料与资金
短头发的不错