如果用AOP技术监控我们的老婆呢?

2020-11-25 14:58:13 浏览数 (1)

上篇我们简单的介绍了什么是AOP,已经AOP使用在哪些场景中,其实已经在工作的朋友随便看看自己的项目,AOP的应用还是随处可见的。

那么作为一个入门的分享教程,这次就简单的带大家实现要给简单的AOP的功能,如果每天在早上和晚上监视自己的老婆化妆和卸妆,希望通过有趣的例子,能带大家对AOP有一个深刻的认识,并且能写出来一个例子。

在进行例子之前,先给大家介绍一下SpringAOP的两种代理机制,一种是基于JDK代理的;另一种是基于CGLib代理的。那么大家可能就要问了,这两种有什么区别吗?大家只要先简单的了解,JDK本身只提供代理的接口,而不支持类的代理,但是CGLib却可以支持类的代理;但是我们在实际项目中都是面向接口开发的,所以使用JDK代理可以满足我们的大部分需求。

如何监视自己的老婆每天早上化妆和每天晚上卸妆呢?

我们先创建一个老婆每天化妆和卸妆的实现类,里面去实现老婆每天化妆和卸妆的操作。

接下来我们是不是要写我们监视老婆的操作。

接下来就是今天的重点了,现在我们还是监视不到老婆每天的化妆和卸妆,到底怎么才能对她进行监视呢?接下来我们先看代码。

我们想要监视我们的老婆就必须先实现InvocationHandler接口,大家可以通过代码看到,它里面实现了一个invoke(Object proxy, Method method, Object[] args),这几个参数里面proxy其实就是最终生成的代理类,method就是代理目标实例的某个具体的方法,通过它我们可以实现发起目标实例方法的反射调用;args就是被代理实例某个方法的入参,在方法反射调用的时候使用。method.invoke(targer,args);通过反射方法调用业务类的目标方法。

我们来看下如何测试:

首先先要实例化我们的目标对象,接下来就是将我们的目标业务类和我们要监视的操作结合在一起,最后我们通过Proxy.newProxyInstance()编制业务逻辑和我们监控的操作的handler创建一个符合WomanService接口的代理实例。方法的第一个参数为类加载器;第二个参数为创建代理实例所需的接口;第三个参数为结合了我们业务逻辑和我们监控的操作的对象。

来看下结果,看有没有对我们的老婆早晚进行到监控:

从结果中我们可以明显的看出,我们对老婆每天的化妆和卸妆都做到了监控的操作,我们不需要在每个业务代码中去进行监控的操作,与我们之前想象大不一样,我们并没有在每个业务层去进行监控,大大简化了我们代码。这就是AOP的魅力所在,今天就跟大家一个简单的AOP的例子,还有好多的东西需要我们去深入的学习,谢谢大家。

0 人点赞