码迷,mamicode.com
首页 > 编程语言 > 详细

spring源码之AOP下篇

时间:2018-07-14 16:40:32      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:htm   ram   doc   .net   入口   mes   fresh   参考   文件   

 

前言

上篇介绍了一些AOP的基础知识,本篇来说一下spring aop的源码分析。初读AOP时,茫然的是不知道从哪里开始,可能是当初对IOC的理解不够深刻。后面发现其实AOP的入口和IOC一样,也是从两个方法开始。一个是AbstractApplicationContext的fresh方法调用obtainFreshBeanFactory方法去读取配置文件进行初始化操作,另一个就是我的getBean方法了。

概述

在读IOC的时候,我们知道IOC分为两个过程:初始化和依赖注入,那么AOP就是在这两种过程加了特殊处理。

  • 在初始化加载Bean定义时加了特殊处理
  • 在依赖注入时加了特殊处理

初始化加载Bean定义时的特殊处理

我们在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);
    }
}
  • 111

Spring中的配置

在spring使用AOP时,我们一般使用两种方式:注解方式和XML配置方式

  • XML方式

  

  • 注解方式

  

总结

  • spring中对AspectJ提供了支持,这块没有去研究过
  • 这篇只是对一些基础概念和常用的两种使用方式进行说明,下篇深入到spring aop的源码

参考链接

  • https://wenku.baidu.com/view/6ce3121da300a6c30c229f89.html(核心关注点与横切关注点)
  • https://www.cnblogs.com/syf/archive/2012/05/09/2491780.html(OOP与AOP)
  • https://blog.csdn.net/garfielder007/article/details/78057107(连接点用地概念)
  • https://docs.spring.io/spring/docs/4.3.18.RELEASE/spring-framework-reference(spring官方文档)

 

spring源码之AOP下篇

标签:htm   ram   doc   .net   入口   mes   fresh   参考   文件   

原文地址:https://www.cnblogs.com/lucas2/p/9309539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!