[email protected]:介绍AspectJ 5

AspectJ 5 (目前处在它的第二个里程碑版本)的主要重点是对 Java 5 中引 入的新 Java 语言特性(包括注释和泛型)提供支持。AspectJ 5 还包含没有加 入 Java 5 的新特性,例如基于注释的开发风格、改进的装入时织入和新的方面 实例化模型。

[email protected] 系列的这一期中,我概述了 AspectJ 5 语言和包含 AspectJ 编 译器及相关工具的 AspectJ 5 版本。我先介绍如何用 AspectJ 5 编译器编译 Java 应用程序 (既可以用命令行编译器也可以用 AspectJ 开发工具(AJDT;请 参阅 参考资料)),然后,我提供了使用 Java 5 特性实现 AspectJ 应用程序 的一些示例。我还讨论了 擦除(erasure) 对 AOP 系统的意义,这是 Java 5 中用来实现泛型的技术,我还解释了 AspectJ 解决问题的方式。这篇文章中描述 的有些特性只能用即将推出的 AspectJ 5 M3 版本编译(计划在 2005 年 7 月发 布)。

也可以下载以下示例中使用的 AJDT 或命令行 AspectJ 编译器。请参阅 参考 资料 获得技术下载的链接。

用 AspectJ 编译 Java 5 应用程序

AspectJ 编译器 (ajc)支持在版本 1.3(及以前版本)、1.4 和 5.0 的兼 容级别上编译 Java 源代码,并生成针对 1.1 版以上 VM 的字节码。像 javac 一样,ajc 有一些限制:在 1.4 版本兼容级别上编译源代码只支持 1.4 及以上 版本的目标 VM,在 5.0 版本兼容级别上编译源代码只支持 5.0 版本的目标 VM 。

AspectJ 编译器的默认兼容级别 是使用 5.0 的源代码级别,并生成针对 5.0 VM 的字节码。可以传递 -1.5 编译器选项,显式地把源代码兼容级别和目标级别 设置为针对 Java 5。假设想用 AspectJ 5 编译器处理 Java 1.4 语言并针对 1.4 VM,那么只需传递 -1.4 即可。

AspectJ 5 织入器也默认在 Java 5 兼容模式下运行。在这个模式中,织入器 会正确地解释 Java 5 中的新特性;例如,编译器在确定 args(Integer) 是否匹 配 int 参数时,会考虑自动装箱和拆箱。如果不是从源文件编译,而是用编译后 的 Java 5 .class 文件 (在 inpath 上),使用 AspectJ 编译器来织入方面( 在 aspectpath 上),那么这就是想要的行为。传递 -1.4 或 -1.3 选项会禁用 Java 5 特性。

AspectJ Development Environment Guide 包含更多关于新的编译器标志和选 项的信息。请参阅 参考资料 一节访问这个指南。

用 AJDT 和 Eclipse 编译

如果正在用 AJDT 编译和运行 AspectJ 程序,那么 AspectJ 就继承了 Eclipse 中为 Java 编译指定的编译器选项。在这种情况下,可以对 AspectJ 进 行配置,把 Java 5 模式作为工作区选项配置使用,或者以每个项目为基础使用 。只要进入 Java 编译器选项配置页,把 Compiler compliance level 属性设置 为 5.0 即可。如果正在从 JDK 1.4 升级,那么可能还需要在项目的 build 设置 中把 JRE 系统库更新到 Java 5 JRE。

图 1 显示了 AJDT 的 Java 编译器选项配置页和一个用于 Java 5.0 兼容级 别的选项配置设置。

图 1. 在 Eclipse 中指定 5.0 兼容级别

时间: 2016-09-04

[email protected]:介绍AspectJ 5的相关文章

非侵入式AOP监控之——AspectJ使用

一引言 二什么是AspectJ 2.1 它只是一个代码编译器 2.2 它是用来做AOP编程的 2.3为什么要用AspectJ 三AspectJ原理与运用 3.1 基本原理 3.2 使用方式 3.2.1 纯注解方式 3.2.2 AspectJ语言 3.2.3 结合自定义注解使用 四 使用AspectJ进行监听方法执行耗时 五一些比较常见的问题 六推荐文章 Demo地址 一.引言 本博文的目的不是详细的介绍AspectJ的细节这是我来实习做的第一个任务因为老大最近让我用非侵入式的方法监测产品方法运行

Spring Aop实例之AspectJ注解配置

       上篇博文<Spring Aop实例之xml配置>中,讲解了xml配置方式,今天来说说AspectJ注解方式去配置spring aop.        依旧采用的jdk代理,接口和实现类代码请参考上篇博文.主要是将Aspect类分享一下: package com.tgb.aop; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lan

AOP@Work: 用AspectJ进行性能监视,第1部分

用AspectJ和JMX深入观察Glassbox Inspector 简介:随着 Ron Bodkin 介绍如何把 AspectJ 和 JMX 组合成灵活而且模块 化 的性能监视方式,就可以对散乱而纠缠不清的代码说再见了.在这篇文章(共分 两部分)的第一部分中,Ron 用来自开放源码项目 Glassbox Inspector 的代码 和想法帮助您构建一个监视系统,它提供的相关信息可以识别出特定问题,但是 在生产环境中使用的开销却足够低. 现代的 Java 应用程序通常是采用许多第三方组件的复杂的

AOP@Work: 用AspectJ和Spring进行依赖项插入

面向方面开发人员可以采用的高级技术 简介:依赖项插入和面向方面编程是互补的技术,所以想把它们结合在一起 使 用是很自然的.请跟随 Adrian Colyer 一起探索两者之间的关系,并了解怎样 才 能把它们组合在一起,来促进高级的依赖项插入场景. 依赖项插入和面向方面编程(AOP)是两个关键的技术,有助于在企业应用程 序中简化和纯化域模型和应用程序分层.依赖项插入封装了资源和协调器发现的 细节,而方面可以(在其他事情中)封装中间件服务调用的细节 -- 例如,提 供事务和安全性管理.因为依赖项插入

AOP@Work: 使用AspectJ 5检验库方面

编写符合所有类型用户需求的可重用方面 简介:AspectJ 5 新的语言和部署特性简化了库方面(library aspect), 而 库方面又保证一般的开发人员能够掌握 AOP.尽管有着不可思议的易用性,但它 们编写起来非常困难.在 [email protected] 系列 的这部分内容中,Wes Isberg 编了一个假想的故事,故事所讲述的世界离您的现实生活并不遥远,其 中 有 30 个重大的挑战.通过这个故事,您将学会如何使用及编写库方面,以及如 何为相信这一技术和不相信这一技术的人交付解决方案. 救命!

Android 基于AOP监控之——AspectJ构建指南

如何使用 使用AspectJ做AOP可以做一些非侵入的AOP监控操作,方便简洁,功能强大,而且对目标工程没有侵入性,可以做切面的操作:监听方法耗时.输出日志.控制初入参数.进行运行时修改等等操作. 在Eclipse中已经有AJDT插件集成了AspectJ编译器的使用和关键字的声明.但是在Android Studio中没有这样的官方插件.因此,这里讲一下如何在Android Studio中使用AspectJ,来实现非侵入式的AOP监控.详细了解AspectJ的使用我在另一篇文章写了--Androi

AOP:基于AspectJ编码简单示例

 一.基本概念 AspectJ 是一种面向切面程序设计的基于 Java 的实现.它向 Java 中加入了连接点(Join Point)这个新概念,其实它也只是现存的一个 Java概念的名称而已.它向 Java 语言中加入少许新结构:切点(pointcut).通知(Advice).类型间声明(Inter-type declaration)和方面(Aspect).切点和通知动态地影响程序流程,类型间声明则是静态的影响程序的类等级结构,而切面则是对所有这些新结构的封装.     基于切面.连接点.切点

AOP@Work: 用AspectJ进行性能监视,第2部分

通过装载时织入使用Glassbox Inspector 简介:有了基本的面向方面的监视基础架构后,可以对它进行扩展以满足真 实 世界的监视要求.在这篇由两部分组成的文章的第二部分,Ron Bodkin 展示了 如 何在 Glassbox Inspector 中添加企业监视功能,包括监视多个应用程序.Web 服务和 Web 应用程序框架.他还展示了如何跟踪应用程序错误并在监视代码中 包 含它们,并展示了如何以编程方式部署和控制这个监视基础架构. 我在本文的 第 1 部分 中给出的基本 Glassb

AOP简单介绍

  AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.   当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系.例如日志功能.日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关