-各位,今天我们说说做红烧鲤鱼.
-慢,打住!不是说讲解AOP术语吗,怎么开始做菜,吃起来了?
-好吧,红烧鲤鱼的一会再吃,咱们先开始红烧鲤鱼下手,讲讲AOP的几个令人头晕的术语.
"工欲善其事,必先利其器",做红烧鲤鱼就得有工具啊,菜刀是必备的.好了,各位先不要遐想我做的红烧鱼了,回过头来,先预览一下AOP的术语:切面(Aspect),目标对象(Target),连接点(Joinpoint),切点(Pointcut),增强(Advice),引入(Introduction),织入(Weaving),代理(Proxy).
好,下面开始为做红烧鱼的前期准备.首先,你需要有一条新鲜的鲤鱼(自行清洗干净,并去除内脏,刮鳞片之类的工作,大厨嘛,一般这些是帮厨做的,嘿嘿);其次,你需要有一些刀具.其他的材料暂且略过.
now,你现在至少有一把刀了,这把刀就是AOP中所谓的"切面",负责对鲤鱼进行细致的工作,比如在鱼身上划几道之类的.不同的刀有不同的功能,比如有些是负责切丝的,有的负责砍骨头的,等等.
而"目标对象"就是我们所说的鱼咯,我们的最终目标不是没有蛀牙,而是把砧板上的鱼做成一道色香味俱全的菜,那么,只有刀和鱼是不够的,为了让味道能够浸入鱼的每一个部位,我们一般都要在鱼的身体上一些部位划几个口子.
那么在鱼的什么部位进行这种切割操作呢?这就要用到上面的术语"连接点"了,所以说连接点是在目标对象上的,即在鱼上.但是鱼的部位不同连接点也有所不同.Srping是仅支持方法的连接点,而对于AspectJ和JBoss而言,不仅提供方法连接点,还有字段和构造函数连接点.这就好比,做红烧鲤鱼的spring说,"我只许你在鱼的肚子和脊背上做手脚",而其他的做法和菜系的AspectJ和JBoss说了,"你也可以在鱼头和鱼尾做一些手脚".
好了,连接点找到了,就在鱼身上,即目标对象的方法中(只针对Spring),那么做为大厨的我们该如何动刀呢?Spring告诉我们说,只许在鱼肚子和背上动刀,可我们不一定要把鱼背每个一厘米都开个刀吧,这样就成碎鱼肉了.好吧,我们只在鱼背上开六刀(六六大顺嘛),这就是传说中的"切点".所以说切点是连接点过滤后的.
OK,开好刀了,此刻,鱼背上就有了六道划痕了,可以看看红红的鱼肉了.这些划痕就是"增强".我们为了让鱼更加鲜美,故意为之.从这里看,这个"增强"的形象是不是很符合AOP中所描述的功能?AOP中的含义是在目标对象中所做的手脚,从而让切点具备我们所要增强的功能,比如性能检测,事务管理等等很容易和业务逻辑糅杂到一块成为一锅粥的功能.
好了,现在基本工作准备就绪,那么鱼直接下锅吗?非也.为了让鱼的味道更好,我们需要在鱼身上再增加以下鱼所没有东东.可以在鱼肚子中塞一些香叶,在鱼背上撒一些葱花等等.这样做出来的鱼色香味美."引入"就是这个含义,引入一些目标对象不具备的特性(这里指方法,比如状态,锁等).这块需要继承新的接口,在以后有时间时,再细细讲解,一般情况下我们用不到的.(不过做菜这些可是必备的哦!)
下面"织入"的的含义不言而喻,我们需要把以上内容进行组织,就如同织布机一样,这样才能在视觉角度上有冲击感.
美味已经准备好了,此时的鱼就是一开始的鱼了,而是浓缩了我们大厨心血的,所以"此鱼非彼鱼也",那么我们该如何称呼此鱼呢,曰"代理".
好了,这条"代理鱼"可以下锅了,后面就是香喷喷的味美,各位记得请我尝尝你所精心制作的红烧鲤鱼吆!