AOP(Aspect Oriented Programming)面向切面编程,在OOP中当需要为多个具有不同继承关系的对象引入同一个公共行为时,比如日志、安全监测等,我们需要在每个对象中引用公共行为,产生重复代码,不利于程序维护。所以就有了对面向对象编程的补充,面向切面编程,AOP所关注的方向是横向的,不同于OOP的纵向。
AOP自定义标签解析
我们知道在容器加载过程中,在doRegisterBeanDefinition方法中对beanDefinition进行注册时,进入parseBeanDefinition方法,通过比对命名空间,进入parseCustomElement方法进行自定义标签解析,先通过命名空间找到对应的handler执行init方法,将对应的parse注册。以以下为例:
<aop:aspectj-autoproxy/>
AspectJAutoProxyBeanDefinitionParser
public BeanDefinition parse(Element element, ParserContext parserContext) {
//注册AspectJAnnotationAutoProxyCreator
AopNamespaceUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(parserContext, element);
//对于注解中子类的处理
extendBeanDefinition(element, parserContext);
return null;
}