<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 28, comments - 27, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    AOP的一些基本概念

    Posted on 2006-09-27 23:51 小小涼粉 閱讀(266) 評論(0)  編輯  收藏
    先說一下AOSD的起源吧

    傳統的軟件工程有一個不變的主題:對關注點的分解和局部化。將系統分解成為主要的功能模塊,識別出關注點的其他問題,確保所有關注點的問題都能在代碼的適當位置得到解決。但是關注點的分散和混雜又給代碼編寫和后期維護帶來了很大的難度。
    因此,必須有一種方法可以把關注點集中在一起,讓系統開發者可以使用關注點自身的模塊來描述每個關注點的行為。
    AOSD,用以尋找軟件系統中新的模塊化特性,允許對系統中多個關注點進行獨立描述,同時又能自動統一到系統中。

    然后是一些常用的術語(from AOSD wiki):

    concern(關注點):A concern is an area of interest or focus in a system. Concerns are the primary criteria for decomposing software into smaller, more manageable and comprehensible parts that have meaning to a software engineer.

    crosscutting(橫切):Note that crosscutting is a relationship between representations of concerns. Note also that it is a symmetric relationship. Therefore, if:

    1. A is a representation of one a concern,
    2. B is a representation of another concern, and
    3. A crosscuts B,

    then B also crosscuts A.

    This means that the term "crosscutting concerns" is often misused in two ways: To talk about a single concern, and to talk about concerns rather than representations of concerns. Consider "synchronization is a crosscutting concern": we don't know that synchronization is crosscutting unless we know what it crosscuts. And there may be representations of the concerns involved that are not crosscutting.

    aspect(方面):Aspects are one kind of concern in software development.

    joint point(聯接點):Join points are those elements of the programming language semantics which the aspects coordinate with. Nowadays, there are various join point models around and still new under development. They heavily depend on the underlying programming language and AO language.

    In a number of presently available AOP languages, a join point is a region in the dynamic control flow of an application. Thus a join point can for instance represent

    * a call to a method,
    * execution of a method,
    * the event of setting a field,
    * the event of handling an exception ...

    Join points can be picked up by an AOP program by using pointcuts to match on them. Depending on the pointcut language the AOP language provides, it may be possible to pick up more or less of those join points. Since join points are dynamic, it may be possible to expose runtime information such as the caller or callee of a method from a join point to a matching pointcut.

    advice:In a number of AOP languages, advice consists of a pointcut and a body. The body executes at join points the pointcut matches. This pointcut may expose runtime information to the advice body.

    pointcut:

    (from Without EJB):A set of join points,defined to specify when an advice should fire.Pointcuts are often described using either regular expressions or another wildcard syntax.

    (from Wiki)In a number of AOP languages, a pointcut is a predicate over dynamic join points, meaning that given a certain dynamic join point, a pointcut can either match this join point or not (at runtime). Another view of pointcuts is often, that they represent sets of join points. A pointcut may expose runtime information to a piece of advice.

    Weaving:The process of coordinating aspects and non-aspects. Weaving can be done explicitly or implicitly, and can be done at a variety of times ranging from by-hand weaving when code is written, through compile-time, post-compile time and load time, up to runtime.

    Without EJB中有個例子很好的解釋了一下上面的術語:

    public class MyBusinessObject implements BusinessObject{
    public void businessMethod1() throws UnauthorizedException{
    doSecurityCheck();
    }
    public void businessMethod2() throws UnauthorizedException{
    doSecurityCheck();
    }
    public void requiresNoSecurityCheck() {
    }
    public void doSecurityCheck() throws UnauthorizedException{
    }
    }

    這里,安全檢查就是一個aspect,需要進行安全檢查的這幾個方法就是join point。而由于不是所有的方法都需要進行安全檢查,所以就需要用pointcut來進行匹配。

    下面使用了一個interceptor來將關注點模塊化:

    import org.aopalliance.intercept.MethodInterceptor;
    import org.aopalliance.intercept.MethodInvocation;

    public class SecurityInterceptor implements MethodInterceptor{
    public Object invoke(MethodInvocation invocation)throws Throwable{
    doSecurityCheck();
    return invocation.proceed();
    }
    public void doSecurityCheck{}
    }

    這里的interceptor就是advice

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久草视频免费在线| 999久久久免费精品播放| 午夜毛片不卡高清免费| 亚洲激情视频图片| 最近最新中文字幕完整版免费高清| 亚洲一级毛片中文字幕| 99久久国产热无码精品免费| 激情综合亚洲色婷婷五月| AA免费观看的1000部电影| 亚洲制服丝袜中文字幕| 午夜老司机免费视频| 色www免费视频| 国产成人综合亚洲AV第一页| 大地资源在线资源免费观看| 亚洲色偷偷偷网站色偷一区| 国产免费AV片在线播放唯爱网| 亚洲中文字幕一二三四区| 高清在线亚洲精品国产二区| j8又粗又长又硬又爽免费视频 | 男人和女人高潮免费网站| 亚洲一区二区三区在线视频 | 国产男女爽爽爽爽爽免费视频| 亚洲人成网站18禁止久久影院| 天堂在线免费观看中文版| 色屁屁www影院免费观看视频| 亚洲综合av永久无码精品一区二区 | 国产精品免费无遮挡无码永久视频 | 国产一级做a爱免费视频| 国产免费MV大全视频网站| 亚洲Av无码专区国产乱码DVD | 亚洲乱妇老熟女爽到高潮的片| 免费一级毛片不卡在线播放| a级毛片无码免费真人久久| 亚洲videos| 亚洲区小说区图片区| 亚洲免费在线播放| 久久亚洲精品高潮综合色a片| 亚洲日韩一页精品发布| 成人片黄网站A毛片免费| 有色视频在线观看免费高清在线直播| 亚洲AV无码久久精品蜜桃|