知识大全 Java中实现基于Aspectwerkz的AOP开发

Posted 框架

篇首语:采得百花成蜜后,为谁辛苦为谁甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java中实现基于Aspectwerkz的AOP开发相关的知识,希望对你有一定的参考价值。

Java中实现基于Aspectwerkz的AOP开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   一 AOP编程概览  面向对象编程技术进入软件开发的主流对软件的开发方式产生了极大的影响 开发者可以用一组实体以及这些实体之间的关系将系统形象地表示出来 这使得他们能够设计出规模更大 更复杂的系统 开发周期也比以前更短 OO开发的唯一问题是 它本质上是静态的 需求的细微变化就可能对开发进度造成重大影响     Aspect Oriented Programming(AOP)是对OO技术的补充和完善 它允许开发者动态地修改静态的OO模型 构造出一个能够不断增长以满足新增需求的系统 就象现实世界中的对象会在其生命周期中不断改变自身 应用程序也可以在发展中拥有新的功能     例如 许多人想必有过在开发简单的Web应用时将Servlet作为入口点的经验 即用Servlet接收HTML表单的输入 经过处理后返回给用户 开始时的Servlet可能是非常简单的 只有刚好满足用户需求的最少量的代码 然而 随着 第二需求 的实现 例如实现异常处理 安全 日志等功能 代码的体积就会增加到原来的三 四倍——之所以称之为 第二需求 是因为Servlet的基本功能是接受和处理用户的请求 对于这个目标来说 日志 安全之类的机制并不是必不可少的     AOP允许动态地改变OO的静态模型 不必修改原来的静态模型也可以加入满足第二需求所需的代码(实际上 甚至连原来的源代码也不需要) 更令人称奇的是 后来加入的代码往往可以集中在一个地方 而不必象单纯使用OO时那样将后来加入的代码分散到整个模型      二 基本术语  在介绍AOP开发实例之前 我们先来了解几个标准的AOP术语 以便更好地掌握相关的概念     █ Cross cutting concern    在OO模型中 虽然大部份的类只有单一的 特定的功能 但它们通常会与其他类有着共同的第二需求 例如 当线程进入或离开某个方法时 我们可能既要在数据访问层的类中记录日志 又要在UI层的类中记录日志 虽然每个类的基本功能极然不同 但用来满足第二需求的代码却基本相同     █ Advice    它是指想要应用到现有模型的附加代码 在本例中 它是指线程进入或退出某个方法时要运行的日志代码     █ Point cut    这个术语是指应用程序中的一个执行点 在这个执行点上需要采用前面的cross cutting concern 在本例中 当线程进入一个方法时出现一个Point cut 当线程离开方法时又出现另一个Point cut     █ Aspect    Point cut和advice结合在一起就叫做aspect 在下面的例子中 我们通过定义一个point cut并给予适当的advice加入了一个日志(logging)aspect     AOP还有其它许多特性和术语 例如引入(Introduction) 即把接口/方法/域引入到现有的类——它极大地拓宽了开发者的想象力 不过本文只介绍一些最基本的持性 熟悉这里介绍的概念后 你再深入一步研究AOP的其它特性 看看如何在自己的开发环境中使用它们      三 现有的框架  目前最成熟 功能最丰富的AOP框架当数AspectJ AspectJ已成为大多数其它框架跟从的标准 但是 AspectJ也走出了非同寻常的一步 它的实现为Java语言增添了新的关键词 虽然新的语法并不难学 但却意味着我们必须换一个编译器 还要重新配制编辑器 只有这样才能适应新的语法 在规模较大的开发组中 这些要求可能难以办到 因为整个开发小组都会受到影响 由于语言本身的变化 开发小组把AOP技术引入到现有项目的学习周期随之延长     现在我们需要的是这样一个框架 它可以方便地引入 且不会对原来的开发和构造过程产生任何影响 满足这些要求的框架不止一个 例如JBoss AOP Nanning Aspecerkz(AW) 本文选用的是Aspecerkz 因为它可能是最容易学习的框架 也是最容易集成到现有项目的框架     Aspecerkz由Jonas Boner和Alexandre Vasseur创建 它是目前最快速 功能最丰富的框架之一 虽然它还缺乏AspectJ的某些功能 但己足以满足大多数开发者在许多情形下的需要     Aspecerkz最令人感兴趣的特性之一是它能够以两种不同的模式运行 联机模式和脱机模式 在联机模式下 AW直接干预属于JVM的底层类装入机制 截取所有的类装入请求 对字节码实施即时转换 AW提供了干预类装入过程的许多选项 另外还有一个替代bin/java命令的封装脚本 这个脚本能够根据Java版本和JVM能力自动生成一组可运行的配制 对于开发者 联机模式有许多优点 它能插入到任何类装入器并在类装入期间生成新的类 也就是说 我们不必手工修改应用程序的类 只要按通常的方式部署即可 不过 联机模式要求对应用服务器进行额外的配制 有时这一要求可能很难满足     在脱机模式下 生成类需要二个步骤 第一步是用标准的编译器编译 第二步是重点——以脱机模式运行AWpiler编译器 让它处理新生成的类 编译器将修改这些类的字节码 根据一个XML文件的定义 在适当的point cut插入advice 脱机模式的优点是AWpiler生成的类能够在任何JVM 以上的虚拟机运行 本文下面要用的就是这种模式 因为它不需要对Tomcat作任何修改 只要对构造过程稍作修改就可以照搬到大多数现有的项目      四 安装  本文将以一个简单的Web应用程序为例 它用Ant编译 部署在Tomcat + Servlet容器上 下面我们假定读者己准备好上述环境 包括JVM + 同时Tomcat被设置成从webapps文件夹自动部署应用 自动将WAR扩展到目录(这是Tomcat默认的操作方式 因此只要你尚未修改Tomcat的运行方式 下面的范例可直接运行) 我们将把Tomcat的安装位置称为%TOMCAT_HOME%     ⑴ 从下载Aspecerkz 解开压缩到适当的位置 我们将把这个位置称为%ASPECERKZ_HOME%     ⑵ 设置%ASPECERKZ_HOME%环境变量     ⑶ 将Aspecerkz加入到PATH环境变量 即设置set PATH=%PATH%;%ASPECERKZ_HOME%\\bin\\aspecerkz    ⑷ 下载本文的示范程序 将它放入%TOMCAT_HOME%\\webapps文件夹     ⑸ 将Aspecerkz的运行时类加入到Tomcat的classpath 你可以将它的JAR文件放入示例应用的WEB INF\\lib文件夹 或放入%TOMCAT_HOME%\\mon\\lib      五 编译示例应用  如果你想深入研究一下本文的示例应用 可以解开WAR文件提取它的内容 你会发现根目录下有一个aspecerkz xml文件 构造应用时它会被复制到WEB INF/classes目录 Servlet和advice的源文件在WEB INF/src目录下 另外还有一个构建这些类的ANT脚本     在运行这个示例程序之前 你还要对它进行后期编译 下面是具体的操作步骤     ⑴ 在命令行窗口中 转到解开WAR文件的目录     ⑵ 输入下面的命令调用AW编译器:aspecerkz offline aspecerkz xml WEB INF/classes cp %TOMCAT_HOME%\\mon\\lib\\servlet jar 如后期编译顺利通过 应看到下面的输出     ( s )  SUCCESS: WEB INF\\classes    在构建文件中有一个名称为war的ANT任务 你可以用它重新创建WAR文件      六 运行示例应用  首先启动(或重新启动)Tomcat 然后在浏览器中打//localhost: /demo/     页面打开后 可以看到一个带二个输入框的HTML表单 一个输入名字 一个输入邮件地址 输入一些数据 然后点击按钮提交表单 出现一个页面显示出联系人信息和一个指向联系人清单的链接      七 代码分析  JSP页面就不分析了 现在我们对它不感兴趣 我们来看看AOPServlet的代码   package example;    import java io *;  import javax servlet *;  import javax servlet *;  public class AOPServlet extends HttpServlet    public void doGet(HttpServletRequest request HttpServletResponse response)   throws ServletException IOException     Person person = new Person();    if (request getParameter( name ) != null)      person setName(     request getParameter( name ));        if (request getParameter( email ) != null)      person setEmail(     request getParameter( email ));        request setAttribute( person person);    RequestDispatcher rd =request getRequestDispatcher( /view jsp );    rd forward(request response);         在这个例子中 Servlet的代码己尽量精简 只包含一些必不可少的代码 如创建了一个绑定请求参数的对象等 但没有持久化操作 不需要额外的imports 它只实现了作为Servlet必须实现的最基本的操作     然而 根据说明文档的要求 这个应用程序必须将所有Person类型的对象特久化 所以要为这个应用程序加入一个aspect 为创建这个aspect 我们首先要创建一个aspecerkz xml文件并将该文件放入classpath指定的目录 本文示例提供了一个简单的例子 你可以用编辑器打开查看     aspecerkz xml的第一部份定义了可用的advice 我们可以根据需要加入任意数量的advice     <advice def name= persist class= example PersistenceAdvice deployment model= perJVM />    在这个片段中 我们定义了一个名称为persist的advice 它的类型是example PersistenceAdvice 最后一个属性定义了该advice的排它性 在这里它的值是perJVM cha138/Article/program/Java/hx/201311/26585

相关参考

知识大全 基于Java并且开放源代码的可扩展开发平台

基于Java并且开放源代码的可扩展开发平台  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ecl

知识大全 用Spring AOP实现开发中松散耦合

用SpringAOP实现开发中松散耦合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!引言  AOP

知识大全 基于Spring AOP实现对外接口的耗时监控

基于SpringAOP实现对外接口的耗时监控  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  AO

知识大全 想学习下手机软体开发 是基于安卓系统的 应该怎样做

想学习下手机软体开发是基于安卓系统的应该怎样做要学好多~学C++,JAVA,及安卓基础~等想找安卓手机软体开发工作应该学什么这个你就去学程式设计和Java,软体开发你可以在应用宝上面下载这个软体开的教

知识大全 基于JNDI的应用开发

java高级编程:基于JNDI的应用开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  基于JN

知识大全 Java编程—Spring AOP本质(6)

Java编程—SpringAOP本质(6)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 基于JSF技术的WEB应用开发

基于JSF技术的WEB应用开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  开发基于Java技

知识大全 J2ME手机开发:java虚拟机是什么

J2ME手机开发:java虚拟机是什么  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!就是许多基于j

知识大全 谈基于.net平台开发中的模式窗体

  作者郑佐适用于Windows操作系统NETFrameworkx运行时环境NETWindows开发VisualStudio摘要本文阐述了在基于NET平台的Windows程序开发中使用模式窗体的诸多方

知识大全 java系统相对于安卓系统的缺点是什么

java系统相对于安卓系统的缺点是什么安卓就是基于java系统开发的,只是在此基础上更多的支持了j2me的类似于java.util包下的功能类,有助于移动端开发WP系统相对于安卓和iOS有什么优势啊?