林信良(良葛格)的专栏

http://caterpillar.onlyfun.net/

用户操作
[即时聊天] [发私信] [加为好友]
良葛格ID:caterpillar_here
226160次访问,排名290好友0人,关注者67
caterpillar_here的文章
原创 49 篇
翻译 0 篇
转载 1 篇
评论 325 篇
良葛格的公告
更多文件请访问
良葛格学习笔记

最近评论
hq_love_love:林老师问您一个问题。我在运行的这第一个例子加载下拉列表的值的时候会有一个alert(list);可以弹出后台String[]所返回的值。而在用DWRUtil.addOptions("op",list);时确报了个错,错误如下
[Object error]...
wangliang_hust2:不错!
wangliang_hust2:顶!!!
jbaowei2000:找不到JSONObject ,报异常
jbaowei2000:JSONObject 是什么?没看明白
文章分类
收藏
    相册
    Java
    夏昕的专栏
    良葛格学习笔记
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 AOP观念与术语收藏

    新一篇: 学习岂有无痛之理 | 旧一篇: Spring技术手册推荐序

    示例下载。

    AOP全名为Aspect-Oriented Programming,有关于AOP的许多名词术语都过于抽象,单从字面上并不容易理解其名词意义,这边将以之前介绍代理机制的范例来逐一对照以介绍AOP的术语与观念:

    • Cross-cutting concern

    DynamicProxyDemo项目的例子中,记录的动作原先被横切(Cross-cutting)入至HelloSpeaker本身所负责的业务流程之中,另外类似于记录这类的动作,如安全(Security)检查、事务(Transaction)等系统层面的服务(Service),在一些应用程序之中常被见到安插至各个对象的处理流程之中,这些动作在AOP的术语中被称之为Cross-cutting concerns
     

    以图片说明可强调出Cross-cutting concerns的意涵,例如原来的业务流程是很单纯的:



    现在为了要加入记录(Logging)与安全(Security)检查等服务,对象的程序代码中若被硬生生的写入相关的LoggingSecurity程序片段,则可使用以下图解表示出Cross-cuttingCross-cutting concerns的概念:



    Cross-cutting concerns若直接撰写在负责某业务的对象之流程中,会使得维护程序的成本增高,例如若您今天要将对象中的记录功能修改或是移除该服务,则必须修改所有撰写曾记录服务的程序代码,然后重新编译,另一方面,Cross-cutting concerns混杂于业务逻辑之中,使得业务对象本身的逻辑或程序的撰写更为复杂。

    •   Aspect

    将散落于各个业务对象之中的Cross-cutting concerns收集起来,设计各个独立可重用的对象,这些对象称之为Aspect,例如在DynamicProxyDemo项目中将登录的动作设计为一个LogHandler类别,LogHandler类别在AOP的术语就是Aspect的一个具体实例,在AOP中着重于Aspect的辨认,将之从业务流程中独立出来,在需要该服务的时候,缝合(Weave至应用程序之上,不需要服务的时候,也可以马上从应用程序中脱离,应用程序中的可重用组件不用作任何的修改,例如在DynamicProxyDemo项目中的HelloSpeaker所代表的角色就是应用程序中可重用的组件,在它需要记录服务时并不用修改本身的程序代码。

    另一方面,对于应用程序中可重用的组件来说,以AOP的设计方式,它不用知道处理提供服务的对象之存在,具体的说,与服务相关的API不会出现在可重用的应用程序组件之中,因而可提高这些组件的重用性,您可以将这些组件应用至其它的应用程序之中,而不会因为目前加入了某些服务而与目前的应用程序框架发生耦合。

    • Advice

    Aspect的具体实作称之为Advice,以记录的动作而言,Advice中会包括真正的记录程序代码是如何实作的,像是DynamicProxyDemo项目中的LogHandler类别就是Advice的一个具体实例,Advice中包括了Cross-cutting concerns的行为或所要提供的服务。 

    • Joinpoint

    Aspect在应用程序执行时加入业务流程的点或时机称之为Joinpoint,具体来说,就是Advice在应用程序中被呼叫执行的时机,这个时机可能是某个方法被呼叫之前或之后(或两者都有),或是某个例外发生的时候。

    • Pointcut

    Pointcut是一个定义,藉由这个定义您可以指定某个Aspect在哪些Joinpoint时被应用至应用程序之上。具体的说,您可以在某个定义档中撰写Pointcut,当中说明了哪些Aspect要应用至应用程序中的哪些Joinpoint 

    • Target

    一个Advice被应用的对象或目标对象,例如DynamicProxyDemo项目中的HelloSpeaker就是LogHandler这个AdviceTarget

    • Introduction

    对于一个现存的类别,Introduction可以为其增加行为,而不用修改该类别的程序,具体的说,您可以为某个已撰写、编译完成的类别,在执行时期动态加入一些方法或行为,而不用修改或新增任何一行程序代码。

    • Proxy

    Expert One-on-One J2EE Development WIthout EJB一书中,Rod JohnsonJuergen Hoeller在第八章中有提到,AOP的实作有五个主要的策略: Dynamic ProxiesDynamic Byte Code GenerationJava Code GenerationUse of a Custon Class LoaderLanguage Extensions

    在之前静态代理与动态代理中,已经使用实际的程序范例介绍过代理机制的实现,SpringAOP主要是透过动态代理来完成。

    • Weave

    Advice被应用至对象之上的过程称之为缝合(Weave),在AOP中缝合的方式有几个时间点:编译时期(Compile time)、类别加载时期(Classload time)、执行时期(Runtime)。
     

    结合DynamicProxyDemo的实例,将以上介绍过的AOP相关名词具体的使用图片来加以表示,有助于您对每一个名词的理解与认识:



    发表于 @ 2006年05月24日 19:08:00|评论(loading...)|编辑

    新一篇: 学习岂有无痛之理 | 旧一篇: Spring技术手册推荐序

    评论

    #罗中伟 发表于2006-07-13 12:18:00  IP: 218.19.148.*
    这个讲的还不够深入!
    #Cai Ke 发表于2006-08-26 19:18:00  IP: 203.122.109.*
    浅显易懂,很适合入门,读了之后对AOP有个初步了解,谢谢
    #cun 发表于2006-08-31 10:51:00  IP: 162.105.81.*
    我个人觉得讲的不是很深入.
    #spring菜鸟 发表于2006-09-09 19:41:00  IP: 202.102.148.*
    林老师:
    您好,看过您的《spring技术手册》,对p103的controlflowpointcut有点不解:
    我的理解时是:主动类,被动类,额外逻辑类三个类中,如果controlflowpointcut在构造时指定的类(即主动类)调用了被动类,那么在则在被动类的方法前织入额外逻辑类的方法。
    我的问题是:1,是在主动类的方法(该方法调用被动类对象)前织入额外逻辑的方法,还是在所调用的被动类的每个方法前织入额外逻辑类对象的方法?按您书中,是前者,我的理解是后者
    2。如果的额外逻辑类,有多个公共方法,织入时都会织入吗
    #spring菜鸟 发表于2006-09-09 19:42:00  IP: 202.102.148.*
    林老师:
    您好,看过您的《spring技术手册》,对p103的controlflowpointcut有点不解:
    我的理解时是:主动类,被动类,额外逻辑类三个类中,如果controlflowpointcut在构造时指定的类(即主动类)调用了被动类,那么在则在被动类的方法前织入额外逻辑类的方法。
    我的问题是:1,是在主动类的方法(该方法调用被动类对象)前织入额外逻辑的方法,还是在所调用的被动类的每个方法前织入额外逻辑类对象的方法?按您书中,是前者,我的理解是后者
    2。如果的额外逻辑类,有多个公共方法,织入时都会织入吗
    #林信良 发表于2006-09-11 00:10:00  IP: 59.104.173.*
    嗯…主动类,被动类,额外逻辑类?我好象没有用这三个名词来介绍耶…XD
    #spring菜鸟 发表于2006-09-11 09:04:00  IP: 202.102.148.*
    我为了便于理解,自创的,但是可以对应到您讲的内容上去,比如p103的,主动类是some.java,被动类是hellospeaker的接口或者代理类,额外的逻辑类是logbeforeadvice.java
    #林信良 发表于2006-09-12 19:54:00  IP: 211.74.204.*
    1. 我的书中并没有讲说是在helloEverybody()方法前就weave,依代理的概念,是在helloNewbie()与helloMaster()前weave(因为使用的是before advice),从结果画面中看也是如此,您仔细看看是有两个logging讯息的…

    2. 我还是看不懂问题是什麽耶…XD
    #spring菜鸟 发表于2006-09-12 21:59:00  IP: 202.102.148.*
    这个问题,我自己试了试,没什么问题了
    另外,林老师能否整理些acegi 方面的资料,给我们作个介绍啊
    不胜感激
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 良葛格