posts - 8, comments - 13, trackbacks - 0, articles - 43
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

AOP学习笔记一:动机

Posted on 2009-08-08 21:55 kangaroo 阅读(218) 评论(0)  编辑  收藏

AOP,全称Aspect Oriented Programming,面向方面的编程。那么就要问了,什么是方面,为什么引入AOP?
一般情况下,OOP能够很好的避免代码重复。具体继承可以帮助我们在不同类型之间共享相同的行为;多态让我们可以用同样的方式处理不同类型的对象,将注意力集中在它们的共同之处。但是,有些时候,OOP也避免不了代码的重复,比如下面的例子:

public class MyBusinessObject extends BusinessObject {
 
    
public void businessMethod1() throws UnanthorizedException {
        doSecurityCheck();
    }


    
public void businessMethod2() throws UnanthorizedException {
        doSecurityCheck();
    }

       
    
public void businessMethod3(){
        
//do not need check security.
    }



    
protected void doSecurityCheck() throws UnanthorizedException {
        
//implement the security check.
    }

}


上面是安全性检查的例子,我们希望检查用户是否有权限执行某个方法,如果没有就抛出异常。我们把安全检查的工作放在一个方法中实现,但是这个仍无法避免一行重复代码的编写。另外,当开发者添加一个新的业务方法时,它完全有可能忘记调用安全检查的方法,从而破坏了应用程序的安全性。为了在方法执行的过程中识别出“应该调用安全性检查”的那一点,我们需要用一种高全新的方式来看待程序结构,而OO的层次模型无法提供这种新的视角。对于这个问题,继承爱莫能助,“安全性检查”在这里是一个具有横切性的问题,需要进行安全性检查的方法都是彼此独立的,无法从某个通用的方法继承下去。
AOP的目标就是将横切型crosscutting的问题以一种更加通用的方式模块化,从而提升程序的模块化程度。在AOP中,我们可以单独编写“安全性检查”的代码,并将其包装为一个方面aspect。(方面的概念出现喽!)然后,我们可以告诉AOP实现产品如何在运行时将方面织入到程序流程之中,具体的实现策略,请看下篇AOP的实现策略。


 


只有注册用户登录后才能发表评论。


网站导航: