Spring源码分析之——AOP的原理及初始化细节
废话不多说!!!!!! AOP 是 Aspect Oriented Programming 的缩写,译为面向切向编程。 原理:Spring AOP的底层源码是基于动态代理和拦截器模式。 对拦截器有疑问的可以看: 设计模式之——拦截器模式 为什么要动态代理? ——答:因为业务类本身是不会主动调用切面逻辑(避免耦合),所以业务类必须被代理,由代理类负责调用业务类,并且调用切面;Spring AOP的JDK动态代理的Invocation类是:JdkDynamicAopProxy,这个类完完整整地实现了动态代理以及后续的拦截器模式的切面调用。 AOP调用切面的原理? ——答:AOP的切面调用本质上是一个拦截器模式,通过解析配置文件把Adivce Bean(切面Bean)封装成一个个拦截器(Interceptor),组成一个调用链(chain),在代理类中调用,调用方式同拦截器模式一模一样。 看上图,切面Bean可以实现MethodBeforeAdvice, AfterReturning, Throwing等接口,实现invoke方法,而Spring通过MethodBeforeAdviceInterceptor,AfterReturningAdviceInterceptor等拦截器类封装业务切面Bean,这样就可以持有业务Advice Bean对象