标签:htm ram doc .net 入口 mes fresh 参考 文件
上篇介绍了一些AOP的基础知识,本篇来说一下spring aop的源码分析。初读AOP时,茫然的是不知道从哪里开始,可能是当初对IOC的理解不够深刻。后面发现其实AOP的入口和IOC一样,也是从两个方法开始。一个是AbstractApplicationContext的fresh方法调用obtainFreshBeanFactory方法去读取配置文件进行初始化操作,另一个就是我的getBean方法了。
在读IOC的时候,我们知道IOC分为两个过程:初始化和依赖注入,那么AOP就是在这两种过程加了特殊处理。
我们在IOC中分析知道,在fresh方法中调用obtainFreshBeanFactory方法,一步步跟进去,最终会把XML的配置信息解析成一个个BeanDefinition对象并注册到DefaultListableBeanFactory上。在DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法中把对定义信息的解析分为了默认元素解析和用户元素解析。AOP的话,走的就是用户元素解析的分支。下面我们以这个为起点,进行分析。
root标签是默认命名空间下的,而<aop:conf>标签不是,则会走parseCustomElement方法进行解析
//DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法
//默认命名空间下的标签走默认标签解析的方法(比如<bean>),用户标签走用户标签解析的方法(比如<aop:conf>)
//这里走用户定义的解析方式
protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) {
if (delegate.isDefaultNamespace(root)) { NodeList nl = root.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node node = nl.item(i); if (node instanceof Element) { Element ele = (Element) node; if (delegate.isDefaultNamespace(ele)) { parseDefaultElement(ele, delegate); } else { delegate.parseCustomElement(ele); } } } } else { delegate.parseCustomElement(root); } }
在spring使用AOP时,我们一般使用两种方式:注解方式和XML配置方式
标签:htm ram doc .net 入口 mes fresh 参考 文件
原文地址:https://www.cnblogs.com/lucas2/p/9309539.html