正在加载图片...
连接点正常返回增加及连接点异常返回增强等类型。 环绕增强( around advice)-是一种功能强大的增强,可以自由改变程序的流程,连接点 返回值等。在环绕增强中除了可以自由添加需要的横切功能以外,还需要负责主动调用连接 点(通过 procee执行激活连接点的程序。 ■引介( (ntroduction) 引介是指给一个现有类添加方法或字段属性,引介还可以在不改变现有类代码的情况 下,让现有的Java类实现新的接口,或者为其指定一个父类从而实现多重继承。相对于增 强( Advice)可以动态改变程序的功能或流程来说,引介( ntroduction)则用来改变一个类的静 态结构。比如我们可以让一个现有为实现 java. lang Cloneable接口,从而可以通过 cloned方 法复制这个类的实例 ■织入( weaving) 织入是指把解决橫切问题的切面模板,与系统中的其它核心模块通过一定策略或规则组 合到一起的过程。在java领域,主要包括以下三种织入方式 1、运行时织入一即在java运行的过程中,使用Java提供代理来实现织入。根据代理产 生方式的不同,运行时织入又可以进一步分为JSE动态代理及动态字节码生成两种方式 由于2SE动态代理只能代理接口,因此,需要借助于一些动态字节码生成器来实现对类的 动态代理。大多数AOP实现都是采用这种运行时织入的方式 2、类加载器织入一指通过自定义的类加载器,在虚拟机JVM加载字节码的时候进行织 入,比如 Aspect Werkz(已并入 Aspec)及 JBoss就使用这种方式。 3、编译器织入一使用专门的编译器来编译包括切面模块在内的整个应用程序,在编译 的过程中实现织入,这种织入是功能最强大的。编译器织入的AOP实现一般都是基于语言 扩展的方式,即通过对标准java语言进行一些简单的扩展,加入一些专用于处理AOP模块 的关键字,定义一套语言规范,通过这套语言规范来开发切面模块,使用自己的编译器来生 成java字节码。 AspectJ主要就是是使用这种织入方式 ■拦截器( interceptor) 拦截器是用来实现对连接点进行拦截,从而在连接点前或后加入自定义的切面模块功 能。在大多数JAVA的AOP框架实现中,都是使用拦截器来实现字段访问及方法调用的拦 截( interception)。所用作用于同一个连接点的多个拦截器组成一个连接器链( Interceptor chain),链接上的每个拦截器通常会调用下一个拦截器。 Spring AOP及 JBOOs AOP实现都是 采用拦截器来实现的。 ■目标对象( Target object 指在基于拦截器机制实现的AOP框架中,位于拦截器链上最未端的对象实例。一般情 况下,拦截器未端都包含一个目标对象,通常也就是实际业务对象。当然,也可以不使用目 标对象,直接把多个切面模块组织到一起,形成一个完整最终应用程序,整个系统完全使用 基于AOP编程方法实现,这种情况少见。 AOP代理( proxy) Aop代理是指在基于拦截器机制实现的AOP框架中,实际业务对象的代理对象。这个 代理对象一般被切面模块引用,AOP的切面逻辑正是插入在代理对象中来执行的。AOP代 理的包括J2SE的代理以及其它字节码生成工具生成的代理两种类型连接点正常返回增加及连接点异常返回增强等类型。 环绕增强(around advice)-是一种功能强大的增强,可以自由改变程序的流程,连接点 返回值等。在环绕增强中除了可以自由添加需要的横切功能以外,还需要负责主动调用连接 点(通过 proceed)来执行激活连接点的程序。 „ 引介(Introduction) 引介是指给一个现有类添加方法或字段属性,引介还可以在不改变现有类代码的情况 下,让现有的 Java 类实现新的接口,或者为其指定一个父类从而实现多重继承。相对于增 强(Advice)可以动态改变程序的功能或流程来说,引介(Introduction)则用来改变一个类的静 态结构。比如我们可以让一个现有为实现 java.lang.Cloneable 接口,从而可以通过 clone()方 法复制这个类的实例。 „ 织入(weaving) 织入是指把解决横切问题的切面模板,与系统中的其它核心模块通过一定策略或规则组 合到一起的过程。在 java 领域,主要包括以下三种织入方式: 1、运行时织入-即在 java 运行的过程中,使用 Java 提供代理来实现织入。根据代理产 生方式的不同,运行时织入又可以进一步分为 J2SE 动态代理及动态字节码生成两种方式。 由于 J2SE 动态代理只能代理接口,因此,需要借助于一些动态字节码生成器来实现对类的 动态代理。大多数 AOP 实现都是采用这种运行时织入的方式。 2、类加载器织入-指通过自定义的类加载器,在虚拟机 JVM 加载字节码的时候进行织 入,比如 AspectWerkz(已并入 AspecJ)及 JBoss 就使用这种方式。 3、编译器织入-使用专门的编译器来编译包括切面模块在内的整个应用程序,在编译 的过程中实现织入,这种织入是功能最强大的。编译器织入的 AOP 实现一般都是基于语言 扩展的方式,即通过对标准 java 语言进行一些简单的扩展,加入一些专用于处理 AOP 模块 的关键字,定义一套语言规范,通过这套语言规范来开发切面模块,使用自己的编译器来生 成 java 字节码。AspectJ 主要就是是使用这种织入方式。 „ 拦截器(interceptor) 拦截器是用来实现对连接点进行拦截,从而在连接点前或后加入自定义的切面模块功 能。在大多数 JAVA 的 AOP 框架实现中,都是使用拦截器来实现字段访问及方法调用的拦 截(interception)。所用作用于同一个连接点的多个拦截器组成一个连接器链(interceptor chain),链接上的每个拦截器通常会调用下一个拦截器。Spring AOP 及 JBoos AOP 实现都是 采用拦截器来实现的。 „ 目标对象(Target object) 指在基于拦截器机制实现的 AOP 框架中,位于拦截器链上最未端的对象实例。一般情 况下,拦截器未端都包含一个目标对象,通常也就是实际业务对象。当然,也可以不使用目 标对象,直接把多个切面模块组织到一起,形成一个完整最终应用程序,整个系统完全使用 基于 AOP 编程方法实现,这种情况少见。 „ AOP 代理(proxy) Aop 代理是指在基于拦截器机制实现的 AOP 框架中,实际业务对象的代理对象。这个 代理对象一般被切面模块引用,AOP 的切面逻辑正是插入在代理对象中来执行的。AOP 代 理的包括 J2SE 的代理以及其它字节码生成工具生成的代理两种类型。 5
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有