03.22 Spring AOP--动态代理原理分析AOP技术

Spring AOP--动态代理原理分析AOP技术

让我们再做一个动态代理的例子,你就马上能够能够理解AOP是个啥东西。好让我们开始定义一个Javabean,它十分简单,也不需要我多做解释:

Spring AOP--动态代理原理分析AOP技术

细心的读者就看到了,正是我们AOP看到的前置消息,后置消息,环绕消息,正常返回后的消息,异常返回消息。外加一个flag标记,它的作用就等同于一个切点,至于什么叫切点,这里放放,不用管它,我们就知道它是个boolean值,是个开关就成了,而useAround意思是是否启用环绕通知,也是一个开关。

一个十分简单的接口和实现类:

Spring AOP--动态代理原理分析AOP技术

实现类:

Spring AOP--动态代理原理分析AOP技术

实现类也很简单,跟着我们改写一些我们上篇谈到的代理类,还是两个步骤:

  • 绑定HelloServiceImpl生成代理类

  • 实现代理方法

代码如下:

Spring AOP--动态代理原理分析AOP技术

Spring AOP--动态代理原理分析AOP技术

好了,这个bind方法我们上篇论述过了,我们关注的是Invoke方法。

1、首先获取一个ConfigBean,(如果是Spring就是拦截器)

2、其次判断是否启用一个ConfigBean进行处理(Spring切点判断,它一般用正则式,大同小异),如果不用则直接反射真实对象HelloService的sayHello方法,完成任务,如果用,则走第3步

3、启动前置通知before(Spring也是一样)

4、进入try ... catch...,如果环绕通知标志为true(spring是判断有没有环绕通知),则执行环绕通知;否则就反射被代理对象的方法。(Spring也是一样)

5、反射后,可能发生异常或者不发生,不发生就进入afterReturn方法,正常返回通知;发生异常就进入afterThrowing方法,异常返回通知。(Spring也是一样)

6、最后执行后置通知after方法,完成整个AOP的过程。(Spring也是一样)

好了,上面就大概是Spring执行各类通知的过程,怎么样在动态代理的分析是不是比教科书的还要清晰?

最后我们测试一下这段代码:

Spring AOP--动态代理原理分析AOP技术

好看看执行结果:

Spring AOP--动态代理原理分析AOP技术

在Spring的AOP中你拿到的就类似于这里的代理对象——proxy,进行了动态代理。好了这里分析了,切点,各类消息它们执行的过程,下一篇我们会更深入的讨论AOP的原理,不过到这里你已经基本掌握了AOP的整个过程。


分享到:


相關文章: