`
pleasetojava
  • 浏览: 730118 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Aspectwerkz动态实现AOP

阅读更多
Aspectwerkz动态实现AOP

目前最成熟、功能最丰富的AOP框架当数AspectJAspectJ已成为大多数其它框架跟从的标准。但是,AspectJ也走出了非同寻常的一步,它的实现为Java语言增添了新的关键词。虽然新的语法并不难学,但却意味着我们必须换一个编译器,还要重新配制编辑器,只有这样才能适应新的语法。在规模较大的开发组中,这些要求可能难以办到,因为整个开发小组都会受到影响。由于语言本身的变化,开发小组把AOP技术引入到现有项目的学习周期随之延长。

现在我们需要的是这样一个框架,它可以方便地引入,且不会对原来的开发和构造过程产生任何影响。满足这些要求的框架不止一个,例如JBoss AOPNanningAspectwerkzAW)。本文选用的是Aspectwerkz,因为它可能是最容易学习的框架,也是最容易集成到现有项目的框架。

Aspectwerkz
Jonas BonerAlexandre Vasseur创建,它是目前最快速、功能最丰富的框架之一。虽然它还缺乏AspectJ的某些功能,但己足以满足大多数开发者在许多情形下的需要。

Aspectwerkz
最令人感兴趣的特性之一是它能够以两种不同的模式运行:联机模式和脱机模式。在联机模式下,AW直接干预属于JVM的底层类装入机制,截取所有的类装入请求,对字节码实施即时转换。AW提供了干预类装入过程的许多选项,另外还有一个替代bin/java命令的封装脚本,这个脚本能够根据Java版本和JVM能力自动生成一组可运行的配制。对于开发者,联机模式有许多优点,它能插入到任何类装入器并在类装入期间生成新的类。也就是说,我们不必手工修改应用程序的类,只要按通常的方式部署即可。不过,联机模式要求对应用服务器进行额外的配制,有时这一要求可能很难满足。

在脱机模式下,生成类需要二个步骤。第一步是用标准的编译器编译,第二步是重点——以脱机模式运行AWcompiler编译器,让它处理新生成的类。编译器将修改这些类的字节码,根据一个XML文件的定义,在适当的point-cut插入advice。脱机模式的优点是AWcompiler生成的类能够在任何JVM 1.3以上的虚拟机运行,本文下面要用的就是这种模式,因为它不需要对Tomcat作任何修改,只要对构造过程稍作修改就可以照搬到大多数现有的项目。

AspectWerkz 主要特性:

1.运行时和加载时字节码修正:你可以在运行时或编译时轻松的改造任何(旧)应用程序或除了rt.jar以外的外部类库

2.支持join point模型

3.支持Annotation:匹配JavaDocJSR-175,支持用户自定义Annotation

4.支持部署多个Aspect定义文件到部署的应用程序(WEB-INF/aop.xmlMETA-INF/aop.xml

5Introduction/内类型声明(也称Mixin),也就是具有添加接口和实现到已存在的类中的能力

6Annotation定义:定义Aspect使用的运行时Annotation(为JSR-175准备)

7XML定义:定义Aspect使用的XMLXML可以用来精炼、改写和解析Annotation定义

8.插件式Aspect管理器能够和IoC框架(如SpringPicoContainer)一起工作

9.四种不同的AdviceIntroduction部署模型(范围):perJVM(单模式)、 perClassperInstance perThread

10AdviceIntroduction能够动态部署、反部署或重新部署

11.高性能,使用JIT编译

12.使用Fine-grained模式语言选择join point

13.所有Advice能够和所有的join point和各种混合类型的pointcut

14.脱机变换(可以用作后处理器)

15AspectAdviceIntroduction使用POJO编码

16.目标类可以是正规的POJO,也就是不需要接口

17.支持通过定义传递参数给Advice和定义可重用的Advice堆栈

18.元数据被加到类中

19.简单的用法和配置

开始AOP

1)这里我们要在屏幕打印出“Hello AOP!”,看如下代码:

//HelloAOP.java

public class HelloAOP {

public static void main(String args[]) {

HelloAOP ha = new HelloAOP();

ha.test();

}

public void test() {

System.out.println("Hello AOP!");

}

}

编译HelloAOP.java文件:javac HelloAOP.java

2)现在我要在输出“Hello AOP!”前后做一些工作,这些工作在运行时会得到调用机会,如果使用AOP术语,我们可以说我们要编写我们的aspect,这个aspect会在运行时被weave into (织入)HelloAOP class

//MyAspect.java

import org.codehaus.aspectwerkz.joinpoint.JoinPoint;

public class MyAspect {

public void beforeTesting(JoinPoint joinPoint) {

System.out.println("before testing...");

}

public void afterTesting(JoinPoint joinPoint) {

System.out.println("after testing...");

}

}

javac MyAspect.java

3)织入过程并不简单,我们需要撰写一个描述文件来将aspect和其织入的class中的信息联系起来。

//aop.xml

<aspectwerkz>

<system id="AspectWerkzExample">

<aspect class="MyAspect">

<pointcut name="testMethod" expression="execution(* HelloAOP.test(..))"/>

<advice name="beforeTesting" type="before" bind-to="testMethod"/>

<advice name="afterTesting" type="after" bind-to="testMethod"/>

</aspect>

</system>

</aspectwerkz>

4)run it

aspectwerkz -Daspectwerkz.definition.file=aop.xml HelloAOP

//output:

before testing...

Hello AOP!

after testing...

Everything is fine!

分享到:
评论

相关推荐

    Java中基于Aspectwerkz的AOP共7页.pdf

    然而,随着Java社区的发展,Aspectwerkz的活跃度逐渐降低,Spring AOP和AspectJ成为了更常用的AOP实现。Spring AOP是Spring框架的一部分,它提供了更广泛的功能,包括对Spring Bean的透明支持,而AspectJ则是一个...

    AOP@Work AOP 工具比较

    AspectWerkz(后来被合并到Spring项目中,成为Spring AOP的一部分)是一个轻量级的AOP框架,它专注于动态代理实现,主要应用于Java EE环境。AspectWerkz强调与现有的EJB和JMS集成,因此在企业级应用中尤为实用。其...

    Java中基于Aspectwerkz的AOP

    Aspect-Oriented Programming(AOP)是对OO技术的补充和完善,它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断改变自身,应用程序也...

    AspectWerkz DEMO + Eclipse插件

    AspectWerkz是一款开源的AOP(面向切面编程)框架,它允许开发者在Java应用程序中实现横切关注点,如日志、事务管理、性能监控等,而无需侵入核心业务逻辑。这个DEMO是AspectWerkz的一个示例项目,结合Eclipse插件,...

    aspectwerkz-2.1.R.jar.zip

    AspectWerkz是一个开源的AOP(面向切面编程)框架,它允许开发者在Java应用程序中实现横切关注点,如日志、事务管理、性能监控等,而无需侵入核心业务逻辑。这个"aspectwerkz-2.1.R.jar.zip"文件包含的是AspectWerkz...

    aspectwerkz-2.0.jar.zip

    3. **增强的织入机制**:织入是AOP的关键部分,AspectWerkz 2.0提供了静态织入和动态织入两种方式,使得开发者可以根据项目需求灵活选择。 4. **元数据支持**:2.0版本引入了更丰富的元数据支持,允许开发者通过XML...

    开发者突击 精通AOP整合应用开发AspectWerkz+AspectJ+Spring.zip

    本书以AOP基础理论为主线,首先讲解AOP的产生与发展、为什么要应用AOP、AOP的核心概念,然后详细讲解AspectWerkz、AspectJ、Spring框架的AOP应用开发技术。 随书附赠的光盘内容为本书开发的案例程序包。本书内容循序...

    aspectwerkz-core-1.0.jar.zip

    AspectWerkz,作为一个开源的Java AOP(面向切面编程)框架,为开发者提供了一种优雅的方式来实现关注点分离,从而提升代码的可维护性和可扩展性。在本文中,我们将深入探讨AspectWerkz的核心库——aspectwerkz-core...

    aspectwerkz-jdk14-2.1.R.jar.zip

    AspectWerkz是一款开源的面向切面编程(AOP)框架,它提供了一种在Java应用程序中实现切面编程的方法,使得开发者能够将关注点分离,提高代码的可读性和可维护性。在Java世界里,AOP是一种强大的设计模式,它可以将横...

    aspectwerkz-1.1.jar.zip

    AspectWerkz是一个开源的AOP(面向切面编程)框架,它允许开发者在Java应用程序中实现切面编程。在给定的文件"aspectwerkz-1.1.jar.zip"中,包含的主要内容是AspectWerkz框架的1.1版本的JAR文件。这个JAR文件通常...

    开发者突击 精通AOP整合应用开发AspectWerkz+AspectJ+Spring.z01

    本书以AOP基础理论为主线,首先讲解AOP的产生与发展、为什么要应用AOP、AOP的核心概念,然后详细讲解AspectWerkz、AspectJ、Spring框架的AOP应用开发技术。 随书附赠的光盘内容为本书开发的案例程序包。本书内容循序...

    开发者突击·精通AOP整合应用开发 源码

    《开发者突击:精通AOP整合应用开发(AspectWerkz+Aspectl+Spring)》以AOP基础理论为主线,首先讲解AOP的产生与发展、为什么要应用AOP、AOP的核心概念,然后再详细讲解AspectWerkz、AspectJ、Spdng框架的AOP应用开发...

    aspectwerkz-jdk14-2.0.jar.zip

    "aspectwerkz"是指AspectWerkz,这是一个开源的AOP(面向切面编程)框架,它允许开发者在Java应用程序中实现切面,以增强代码的模块化和可维护性。"jdk14"表明此版本的AspectWerkz是为Java Development Kit 1.4设计...

    aspectwerkz-core-2.1.jar.zip

    aspectwerkz-core-2.1.jar是AspectWerkz框架的主要组成部分,包含了实现AOP功能的类和接口。这个版本主要关注性能优化和API的稳定,提供了丰富的切面定义、通知类型和织入机制,使得开发者可以更方便地创建和管理切...

    AOP JAVA .NET

    除此之外,还有其他基于Java的AOP框架,如AspectWerkz,它提供了一个轻量级的动态解决方案。 在Java平台上,AOP的实现通常依赖于字节码操作,如AspectJ的编译时编织(CTW)和运行时编织(RTW)。CTW是在编译源代码...

    aspectwerkz-extensions-2.1.R.jar.zip

    1. **代理机制**:AspectWerkz提供了一种动态代理机制,使得可以在运行时创建带有切面逻辑的对象实例,这在处理如事务管理等横切关注点时非常有用。 2. **元数据支持**:aspectwerkz-extensions可能包含了对元数据...

    aspectwerkz-extensions-2.1.jar.zip

    2. **动态代理**:AspectWerkz通过动态代理技术实现了切面的织入(weaving),即使在运行时也能动态地将切面应用到目标对象上。这对于那些无法在编译时进行织入的场景,如第三方库的代码,具有很高的实用性。 3. **...

    Spring-AOP .pptx

    - AOP是Aspect Oriented Programming的缩写,通过运行时动态代理实现程序功能的统一维护。 - 在Spring框架中,AOP用于隔离交叉业务逻辑,如事务管理、日志、安全检查和缓存,使其独立于主业务逻辑。 - AOP能够...

    aspectwerkz-1.0.jar.zip

    这个文件主要是为了方便用户下载和管理AspectWerkz的JAR包,该库是一个面向切面编程(AOP)的框架。 【描述】中提到的"aspectwerkz,1.0,jar.zip包下载,依赖包"表明AspectWerkz是一个特定版本(1.0)的软件包,它以...

    aspectwerkz-2.1.jar.zip

    AspectWerkz是一款基于Java的面向切面编程(AOP)框架,它允许开发者在不修改现有代码的情况下,添加新的功能或者修改行为,实现了业务逻辑与横切关注点的解耦。在本文中,我们将深入探讨AspectWerkz 2.1.jar的核心...

Global site tag (gtag.js) - Google Analytics