`
Jummy
  • 浏览: 61258 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用家常话,聊聊一些费解的AOP概念

阅读更多

 

  我的前一篇文章呢对 JDK 的动态代理说了一番,也花了不少时间来写那边文章。有时候觉得心里的想法要靠笔杆子(键盘)来表达出来,至少说精确表达还是有一定难得的。也许这就是草根阶层的笔民与作家之间的差距吧。 OK Whatever 感慨少发。切入正题 :AOP.

  有时候我怀疑自己到底是个完美主义者还是个做事慢性子的人,总觉得做什么之前得想好了。先做什么在做什么。比如讲 AOP 吧,估计两篇文章下来都没正经的说给大家写了个 Spring 框架下的小例子,搞几行代码怎么的。可回头想想,代码 - 网上一大堆 ; 例子 参考书写的比我周全。我还不如讲点 WHY 少点 HOW 就跟打球一样基本功好了,什么动作都好做。基本功不行,运球过半场都成问题。

  先从 AOP 的概念说起吧,我们不再去看 Spring-framework 的参考手册。那些太专业,人家限于篇幅都是以最精辟最简短的词语来写,目的达到了,可问题来了真正有几个人能把 Cross cutting concern Aspect 等等概念说的大众化,普通话。让没接触过 Spring 不知道 Spring 为何物的 JAVA 初学者们一目了然呢?

    我们平常所接触的 OOP 都是一个纵向的编程理念,从上往下先做什么后做什么。比如你上网购物,你得先登录然后你在购买,这是一个流程。假如登录时需要安全性检查、事务、记录日志等,(其实这些都不属于我们的业务逻辑)。所以我们就不该把这些不属于业务逻辑的代码散布在业务逻辑类之中。此时我们添加一个横向的编程。等业务逻辑到这一步我们就通过横向方法实现(也是面向切面的实现)。你所需要实现的横向功能(或者说需求吧)就是所谓的 cross cutting concern (横切关注点这个概念比较抽象,谁给大家细说说参考手册中对这个也是很模糊一带而过)。

   Aspect 就是将 cross cutting concern 模块化,抽取出来形成的一个具体的类。之前你肯能需要在每一个需要进行安全性检查的类中都去自己实现检查,而现在不同。 AOP 将它模块化,所有的安全性检查都交给 Aspect 来做,你的类中就只管实现自己所需要的业务逻辑了从而你的代码清晰,功能明确!有人可能要问了,那我自己写的类怎么调用这些安全性检查呢?答案是: Spring 会帮你实现(不然还那么麻烦用什么框架呢)。想起代理了吗?(我在前一篇文章《从 JDK 动态代理说 Spring AOP 》说的比较详细,可以去看看)。

  需要的功能我们抽取出来了 ( 就是说得到切面 Aspect ) ,之后就得去设计具体的方法了(比如需要验证,那我们就写一个验证方法呗)。此时 Advice 就应运而生了,我们在具体的 Aspect 类中去设计具体的方法(也是设计 Advice ,现在应该明白 Advice 的大概了吧其实它就是一个方法。只是 Spring 给它取名曰:通知)。比如我要写一个用验证的安全类 Security (负责所有的验证功能) , 当中有个方法叫 checkSecurity(), 在调用其他方法之前调用它那它就成了前置通知( before 的概念有了吗?),之后调用就是后置通知( after )异常时调用就成( Throws 通知)。等等 ..

  通知设计完之后我们需要调用啊,可是不是所有的方法都需要这一方法(如果不管三七二十一所有方法通过这横切面就需要调用,那效率何在?这不比收费站,你过就得给钱啊。呵呵 有车的朋友应该感受比较深刻),这时就需要进行判断了。判断的依据就是 Pointcut ,比如我只需要对方法名称开头为 add 的方法调用,那此时的 Pointcut 或许就定义为 add* 了。这下该明白什么是 PC 了吧,他就是一套表达式,常用的就支持正则表达式 通过他来进行方法的筛选,类似过滤器。

  通知我们设计好了,也进行了筛选了现在就是将刷选的通添加到我的 Target Object 了(这一步 Spring 是通过代理实现的)。这个添加的过程就是所谓的 Weave Spring 给了个很酷的名字“织入”。而 TO (目标对象)就是需要调用通知的那个类(暂且说类吧,形象点),而 TO 中那个可以触发通知的方法就是所谓的 JoinPoint

<!----><!---->

   为了形象话,我把这一些概念组合起来画了个简单的示意图对照那个看文章会更加容易理解的。(JAVAEYE好像不让传本地图片上来,我就在附件里吧。就是麻烦点了)

  说了这么多,其实要真正理解 AOP 还是那两个关键字眼:代理( Proxy . 这个明白了,那就是你熟练与否的问题了。而熟练就是你花时间多少的问题了。

  当然,可能说了这么多,写了这么多错误是难免的。若有疏忽之处还望各位指点指点,有什么需要可以给我留言,发邮件什么的。。。奋斗在编程行列的兄弟们(好像 MM 很少哦这一行)努力吧。朋友都说“我们都成宅男了,当然前提是长得帅哦 呵呵(玩笑玩笑)” 看完这个之后你在去对照你的 Spring 开发手册再回过头去看,你会发现会更加的容易理解至少很形象化。

 

<!----><!----><!---->  

 

  

  • 大小: 37.1 KB
分享到:
评论
28 楼 gritlimu 2009-03-06  
AOP = 中介公司
27 楼 picora 2009-03-02  
看你附件里的图,怎么觉得和某培训机构的教学视频里一样?连方法名都一样~
26 楼 honda418 2009-03-02  
看了3篇说AOP的文章,越看越迷糊。。。。。

最后看了一个例子后,才明白一点,这时候再返回去看AOP文章,或许效果要好很多

个人感受,呵呵
25 楼 云中苍月 2009-02-26  
简单,明确。
24 楼 kantery 2009-02-26  
LZ其实很有形象思维,aop的概念你说的很清楚了。。。
23 楼 twinklingstar 2009-01-19  
不管怎样 我觉得真的写的蛮好的 我都看spring的官方文档给看迷糊了 谢谢了  不知道以后如果碰到问题了是否可以请教呢 是否可以告诉我联系方式呢
22 楼 sussman 2009-01-14  
理解aop相关概念后在通俗化的表达出来加深理解,赞一个
21 楼 DoubleEO 2008-12-26  
我觉得spirng的aop和ioc概念一点都不让人费解,就是java基础上的新花样,你的基础稳固了,spring和hibernate这样的优秀框架,就带着你飞了
20 楼 yunhaifeiwu 2008-12-16  

什么纵合、横向。说白了,就是在某个语句处,增加一个接口,方便以后在该语句处增加功能、或改变程序执行流程。其中增加的功能既可在该语句处前执行,也可在该语句后执行。

这个spring aop的出现,可方便的在任意代码处,为以后的功能扩展提供技术实现。


  学习spring aop的有效办法之一是,找一个简短详尽的实例跟踪调试一下,基本上也就清楚了。 (这种实例,光javaeye就有一大把)
19 楼 slaser 2008-12-15  
我怎么觉得还是spring refenrence好懂点。
18 楼 jiangsu_zxl 2008-12-15  
学习spring,正巧看到这篇文章,受益!
17 楼 levin_yuu 2008-12-13  
将spring aop中几个复杂的概念讲得通俗易懂,赞一个!
16 楼 swen00 2008-12-10  
现在是个公司面试java,都问AOP的理解!××
15 楼 karidyang 2008-12-03  
lz讲的还是不错,蛮清晰易懂的。。
14 楼 yasaso 2008-11-28  
Nice  顶楼主
13 楼 reed7 2008-11-27  
感谢lz,总算有点明白AOP这个东东了
12 楼 njuptsoz 2008-11-27  
确实很容易理解,谢谢LZ
11 楼 anson_xu 2008-11-25  
我以为lz说 看完这个之后你在去照照镜子
10 楼 zengzehui 2008-11-25  
很清晰。。。。
9 楼 andy54321 2008-11-25  
现在不费解了;
期待lz继续

相关推荐

    500道家常菜

    在分享和使用“500道家常菜”时,应尊重原作者的知识产权,确保不进行非法复制和传播。如果是商业用途,可能还需要获得授权许可。 最后,从用户体验设计的角度,一个好的CHM文件应该具有清晰的目录结构,易于阅读的...

    500道家常菜.exe

    500道家常菜,步骤详细,罗列了各种菜种,让你很快成为大厨师

    家常菜谱羹汤—蔬菜,海鲜,肉类,禽蛋,异国风味

    家常羹汤--蔬菜,海鲜,肉类,禽蛋,异国风味,经典简单,家居必会,操作简单,一看就会,一册在手,全家无忧

    1000道菜的做法家常菜.doc

    【标题】和【描述】提及的是一个文档,名为“1000道菜的做法家常菜.doc”,这是一份包含多种家常菜烹饪方法的集合,适合家庭烹饪爱好者或者想要学习厨艺的人参考。文档中列举了从红烧鳊鱼到椒盐排骨等多种菜品的制作...

    24道家常菜的做法(都很简单且美味)

    以下是一些从标题和描述中提取的家常菜做法及烹饪技巧: 1. **啤酒酱香鸡翅**:这道菜的关键在于啤酒的使用,它既能去腥增香,又能使鸡肉更加鲜嫩。鸡翅先用开水焯烫去血水,再用油煎至两面金黄,然后加入调料和...

    菜谱秘方1.0 传统家常菜系百种特色

    【标题】"菜谱秘方1.0 传统家常菜系百种特色"揭示了这是一款专注于传统家常菜的烹饪指南软件。这个标题暗示了该软件内含丰富的菜品制作方法,涵盖了中国各地的不同菜系,每一种都有其独特的风味和烹饪技巧,旨在帮助...

    家常炖菜.doc

    家常炖菜.doc

    家常炒菜菜谱.doc

    今天,我们将为大家分享一些家常炒菜菜谱,让大家能够更好地准备和享受美食。 首先,让我们来看看一些简单的家常菜谱。例如,我们可以制作黑糯米粥,枸杞菊花茶,豆浆等。这些食材不仅能够满足我们的营养需求,还...

    100道家常菜做法.docx

    家常菜做法大全 根据提供的文件信息,我们可以总结出以下家常菜做法知识点: 一、鱼类做法 * 剁椒鱼头的做法:将鱼头洗净吹成两半,鱼头背相连,泡红椒剁碎,葱切碎,姜块切末,蒜半个剁细末。在鱼头上撒上剁椒、...

    80个家常炒菜菜谱.pdf

    "80个家常炒菜菜谱.pdf" 以下是从给定的文件中提取的相关知识点: 1. 烹调技巧: * 制作工艺:包括选择合适的食材、准备食材、烹调食材、调味等步骤。 * 炒锅技巧:包括选择合适的锅具、加热锅具、倒入食材、翻...

    100道家常菜菜谱,烧菜更轻松

    本文将详述从“100道家常菜菜谱”中精选的一些菜品及其制作技巧,帮助对烧菜有兴趣的朋友提升烹饪技能。 1. **肉类烹饪**: - **香橙烧猪肉条**:巧妙地利用香橙的酸甜来平衡猪肉的油腻,增添清新口感。 - **东坡...

    粤菜家常小炒.doc

    粤菜家常小炒.doc

    江苏菜做法大全,江苏家常菜菜谱大全,.docx

    以下是一些江苏菜的经典菜肴及其制作方法: 1. **鸡茸干贝**:这道菜属于江苏菜系,特点是色泽乳白,鲜嫩味美。主料包括大干贝、鸡胸脯肉和鸡蛋清,调料有熟大油、料酒、味精、盐、湿淀粉和鸡汤。制作过程中,首先...

    大肠家常做法范文.docx

    以下是一些大肠的家常做法和清洗技巧。 1. **大肠砂锅**: - 主要原料包括粉丝、白菜、胡萝卜、口蘑等,调味料有料酒、胡椒粉、葱、姜、酱油、盐和鸡精。 - 首先,粉丝泡软,蔬菜切好,大肠焯水去腥。 - 锅中...

    家常便饭糊涂粥.exe

    家常便饭糊涂粥.exe

    家常炒菜做法大全.doc

    家常炒菜做法大全.doc

    饭店家常菜菜单.doc

    饭店家常菜菜单.doc

    家用食谱-家常菜,水饺馅,冰激凌.pdf

    例如,葱爆牛肉是一道经典的家常菜,牛肉切片后用蛋清、料酒、老抽腌制,再与葱段、蒜末一起翻炒,加入生抽、盐等调料,既能保持牛肉的嫩滑,又能提升风味。而香肠焖米饭则是在电饭锅中进行,香肠切片与大米、姜丝、...

    学做家常菜教学设计与实施案例.doc

    2. 综合实践活动:《学做家常菜》是一个综合实践活动课程,旨在通过实践活动,提升学生的知识、能力和情感态度价值观。 3. 活动目标设定:包含了知识目标(如掌握基本烹饪技巧),能力目标(如提高实践和创新能力,...

    家常饭与做饭技巧.docx

    家常饭菜是我们日常生活中不可或缺的一部分,掌握一些基本的烹饪技巧能够让你的餐桌更加丰富多彩。以下是一些常见的家常菜做法及其关键技巧: 1. **酸辣土豆丝**: - 土豆切丝后用清水浸泡,能去除淀粉,保持口感...

Global site tag (gtag.js) - Google Analytics