入口:META/spring.handlers中配置了aspectj-autoproxy的解析类为AopNamespaceHandler,当在xml配置时,会找到这个handler,并执行init方法
一、前提,注册解析器
 1.注册AspectJAutoProxyBeanDefinitionParser解析类
 2.扫描Element时,逐级调用注册AspectJAutoProxyBeanDefinitionParser的parse方法->AopNamespaceUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(parserContext, element);
 3.2中接口做了三件事 主要是RootBeanDefinition增加AnnotationAwareAspectJAutoProxyCreator类型的bean
二、开始解析 构建advice
 1.initializeBean->applyBeanPostProcessorsAfterInitialization->AbstractAutoProxyCreator.postProcessAfterInitialization->wrapIfNecessary(关键方法,如果它适合被代理,则要封装指定bean)
 2.※※※ wrapIfNecessary ※※※ -> AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean->findEligibleAdvisors->findEligibleAdvisors->BeanFactoryAspectJAdvisorsBuilder.buildAspectJAdvisors() -> 主要逻辑
 1⃣️循环所有的 beanName:BeanFactoryUtils.beanNamesForTypeIncludingAncestors(this.beanFactory, Object.class, true, false) 找出对应的增强方法
 2⃣️寻找类上的@Aspect注解 advisorFactory.isAspect(beanType)
 3⃣️解析AspectJ注解中的增强方法advisorFactory.getAdvisors(factory)
 4⃣循环遍历该类中的所有增强方法 getAdvisorMethods(aspectClass)跳过@Pointcut标记的注解 -> 寻找方法上的Before.class, Around.class, After.class, AfterReturning.class, AfterThrowing.class, Pointcut.class注解
 5⃣️获取切点表达式,封装成AspectJExpressionPointcut类,再包装成InstantiationModelAwarePointcutAdvisorImpl增强器
 6⃣️InstantiationModelAwarePointcutAdvisorImpl构造方法中的instantiateAdvice初始化不同的增强器,如AtBefore对应AspectJMethodBeforeAdvice
 7⃣️增强器的实现
 1.@before 间接 MethodBeforeAdviceInterceptor包装了AspectJMethodBeforeAdvice:before->invokeAdviceMethod()->invokeAdviceMethodWithGivenArgs()->aspectJAdviceMethod.invoke
 2.@After 直接 AspectJAfterAdvice: invoke->invokeAdviceMethod
 8⃣️返回advice
三、怎么调用到invoke方法中去的 调用代理类后是怎么调用对应的增强方法的,为啥是invoke方法?
 0.衔接二、createProxy
 1.jdk代理 JdkDynamicAopProxy实现了InvocationHandler接口,getProxy方法把this放入,反编译后的文件见https://www.cnblogs.com/gonjan-blog/p/6685611.html
 同名方法会改成调用h.invoke方法即JdkDynamicAopProxy.invoke方法
 2.构建MethodInvocation
 MethodInvocation invocation = new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain);
 // Proceed to the joinpoint through the interceptor chain.
 retVal = invocation.proceed();
 3.转成对应的增强器,执行增强器中的方法










