美文网首页
spring AOP xml声明式实现解析

spring AOP xml声明式实现解析

作者: lotusfan2018 | 来源:发表于2018-10-18 11:49 被阅读0次

加载标签解析类AopNamespaceHandler,对应解析xml文件的元素类为 ConfigBeanDefinitionParser

public class AopNamespaceHandler extends NamespaceHandlerSupport {

    /**
     * Register the {@link BeanDefinitionParser BeanDefinitionParsers} for the
     * '{@code config}', '{@code spring-configured}', '{@code aspectj-autoproxy}'
     * and '{@code scoped-proxy}' tags.
     */
    @Override
    public void init() {
        // In 2.0 XSD as well as in 2.1 XSD.
        registerBeanDefinitionParser("config", new ConfigBeanDefinitionParser()); //解析aop xml元素
        registerBeanDefinitionParser("aspectj-autoproxy", new AspectJAutoProxyBeanDefinitionParser());
        registerBeanDefinitionDecorator("scoped-proxy", new ScopedProxyBeanDefinitionDecorator());

        // Only in 2.0 XSD: moved to context namespace as of 2.1
        registerBeanDefinitionParser("spring-configured", new SpringConfiguredBeanDefinitionParser());
    }
}

ConfigBeanDefinitionParser:

@Override
@Nullable
public BeanDefinition parse(Element element, ParserContext parserContext) {
    CompositeComponentDefinition compositeDef =
            new CompositeComponentDefinition(element.getTagName(), parserContext.extractSource(element));
    parserContext.pushContainingComponent(compositeDef);

    configureAutoProxyCreator(parserContext, element);

    List<Element> childElts = DomUtils.getChildElements(element);
    for (Element elt: childElts) {
        String localName = parserContext.getDelegate().getLocalName(elt);
        if (POINTCUT.equals(localName)) {
            parsePointcut(elt, parserContext);//解析pointcut并注册
        }
        else if (ADVISOR.equals(localName)) {
            parseAdvisor(elt, parserContext);//解析advisor并注册
        }
        else if (ASPECT.equals(localName)) {
            parseAspect(elt, parserContext);//解析aspect并注册
        }
    }

    parserContext.popAndRegisterContainingComponent();
    return null;
}

加载aop xml的源码相对简单一点,从代码逻辑中很明显的看出封装POINTCUT,ADVISOR和ASPECT的过程

相关文章

  • spring AOP xml声明式实现解析

    加载标签解析类AopNamespaceHandler,对应解析xml文件的元素类为 ConfigBeanDefin...

  • spring04

    Spring JdbcTemplate学习 Spring 声明式事务 xml配置实现 Spring 声明式事务 注...

  • 第12章-Spring基于注解配置AOP

    Spring 的 AOP 功能是基于 AspectJ 实现的,支持使用注解声明式定义 AOP 切面。 理解 AOP...

  • Spring 声明式事务

    Spring事务与AOP的联系   Spring中声明式事务是借助于AOP来实现的,在AOP中我们可以对切面进行配...

  • Spring 事务之声明式事务

    一.声明式事务实现 将编程式事务章节中applicationContext.xml修改下: 声明式事务通过AOP代...

  • load-time-weaver源码分析--aop.xml解析部

    load-time-weaver源码分析--aop.xml解析部分 备注:spring解析META-INF/aop...

  • spring事务(二) 声明式事务

    spring事务(二) 声明式事务 知识导读 声明式事务是对编程式事务的包装 声明式事务通过使用AOP来实现,注册...

  • Spring Aop标签解析原理详解

    对于Spring Aop的实现,是非常复杂的,其实现过程主要包含xml标签的解析,切面表达式的解析,判断bean是...

  • spring中的事务管理

    Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案。 声明式事物 1)Spring...

  • spring-aop

    aop概念aop概念aop术语AOP实现方式1、spring-aop(使用xml文件实现AOP)2、AspectJ...

网友评论

      本文标题:spring AOP xml声明式实现解析

      本文链接:https://www.haomeiwen.com/subject/emmjzftx.html