Spring源码之AOP

spring aop例子

  • pom.xml加入aspectjweaver、spring-context
  • spring的xml里面加上<context:component-scan base-package=“com.ydfind.aop”/>,可对@Component自动创建类;当然也可以写对应的bean节点;
  • spring的xml里面开启自动代理:aop:aspectj-autoproxy/
  • 切面所在目标类PersonServerImpl
  • 切面类AspectJ,实现@Aspect,里面的@After(myPointCut)等才会有效;

spring解析xml的过程

这个涉及到依赖注入IOC的问题。
spring在解析标签时,会通过 实现了NamespaceHandleRevolver接口的DefaultNamespaceHandleRevolver类 加载classpath下所有的spring.handlers文件中的映射(文件内容如下面的图示),通过映射找到 标签 对应的处理类,进而用该处理类处理标签。-------处理器通常在init函数注册标签对应的解析器

标签<context:component-scan />源码详解

context:component-scan标签解析
在解析该标签时,通过DefaultNamespaceHandleRevolver加载所有spring.handlers文件中映射,即schema/context对应的处理器是ContextNamespaceHandler,可以该处理器源码,在init函数中把component-scan对应的解析器初始化为ComponentScanBeanDefinitionParser
Spring源码之AOP
Spring源码之AOP
解析过程,源码如下面所示,具体的就不展开了
Spring源码之AOP
Spring源码之AOP

注解@Aspect

同理,可以找到处理器AopNamespaceHandler,解析器AspectJAutoProxyBeanDefinitionParser
Spring源码之AOP