一.静态横切
动态横切改变程序的行为,静态横切改变程序数据类型(class,interface,aspect)的结构和织入时行为
静态横切分为三类:Inter-Type declaration,Weave-time error and warning declarations 、Exception softening
1)Inter-type declaration
通过一种类型(aspect)为另一种类型(interface、class、甚至是aspect)提供声明。包括成员引入(Member-Introduction),类型结构更改(Type-Hierarchy Modification)和注解补充等支持。
2)Weave-time error and warning declarations
检测织入时连接点处错误和警告的存在。
3)Exception softening
使用横切的方法处理checked exception
二.静态横切详解
1) 成员引入(Member-Introduction)
语法实例:
a. private PropertyChangeSupport Customer.propertyChangeSupport;
向Customer类中引入private PropertyChangeSupport propertyChangeSuppor成员, 但在引入它的Aspect中可以直接访问
b. public void Customer.addPropertyChangeListener(PropertyChangeListener listener) {...} 向Customer类中引入方法
成员引入规则:
1)切面只能引入public或者private的成员。当修饰符是public时,成员对其他类和切面是可见的;
当修饰符是private时,成员只对引入该成员的aspect可见。当使用private 引入时,实际织入的成员名称是mangled version的
2)多个aspect可以引入名字相同的private成员,但是不能引入名字相同的public成员
3)aspect可以向类或者借口中引入字段(final或者non-final的)、方法、构造器。
4)如果一个类中有一个方法,aspect向其父类中引入了相同签名的方法,则在子中使用子类方法的实现
5)一个成员引入的声明只能用于一个类型。例如:以下用通配符的声明是不允许的: private PropertyChangeSupport *.propertyChangeSupport
2) 改变类型的层次结构(Modifying the type hierarchy)
可用于改变已存在的类或接口的层次结构
语法规则:
declare parents : [TypePattern] implements [InterfaceList];
declare parents : [TypePattern] extends [Class or InterfaceList];
实例:
declare parents: banking.entities.* implements BeanSupport;
banking.entities 包下的所有类实现BeanSupport接口
declare parents: @Entity * implements BeanSupport;
声明所有加@Entity注解的类实现BeanSupport
3)为多个类型引入成员(Introducting members to multple Types):
实现方式:通过使用中间接口。
4) 提供注解:
可以给方法、字段、构造器、类引入注解
实例:
declare @method: * AccountService.*(..): @Transactional(Propagation.Required);
给所有的AccountService类的方法加入@Transactional(Propagation.Required)注解
declare @constructor: AccountService+.new(): @ConfigurationOnly;
为AccountSerivce及其子类的无参构造器加上@ConfigurationOnly注解
declare @field: * MissileInformation.*: @Classified;
为MissileInformation类的所有字段加上 @Classified注解
declare @type: banking..* : @PrivacyControlled;
为banking直接和间接子包下的类加上@PrivacyControlled注解
5)声明织入时错误和警告(Declaring weave-time errors and warnings):
满足某pointcut的joinpoint处时会抛出异常或者警告
注意:这种机制影响的是编译时的行为,所以不能用于runtime的pointcut,
例如:this(), target(), args(), @this(), @target(), @args(), if(), cflow(), and cflowbe-low()
语法:
declare error : <pointcut> : <message>;
declare warning : <pointcut> : <message>;
6)软化受检异常(Softening checked exceptions)
使你处理某些pointcut抛出的checked exception像unchecked exception一样处理,即不用try catch 语句或者throws
语法:
declare soft : <ExceptionTypePattern> : <pointcut>;
<!--EndFragment-->
分享到:
相关推荐
**Spring AspectJ 学习详解** 在Java世界中,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力而闻名。AspectJ是AOP领域的一个强大工具,它扩展了Java语言,允许开发者创建所谓的"切面",来封装横切...
**AOP编程之AspectJ实战** 在软件开发中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在减少代码的重复性和提高模块化程度。AOP通过将关注点(如日志记录、事务管理、安全性检查等)...
AspectJ是Java编程语言的一个面向切面编程(AOP)的框架,它是基于Java语言的,能够给Java程序添加切面编程的特性。AspectJ5是AspectJ的一个版本,它引入了许多新的特性和改进,这些改进包括对Java 5的支持、对...
**Aop之AspectJ详解解读** 在软件开发中,面向切面编程(AOP)是一种设计模式,它允许程序员将关注点分离到不同的模块,从而提高代码的可维护性和复用性。AspectJ是Java平台上的一个开源AOP框架,它提供了一种强大...
在学习AspectJ时,有几个关键概念是必须掌握的: 1. **切面(Aspect)**:切面是AspectJ的核心,它封装了系统中的一个关注点,例如数据验证、事务管理等。切面由通知(advice)、切点(pointcut)和引入...
同时,提供的《AspectJ程序设计指南.pdf》也是一份详细的教程,涵盖了AspectJ的各个方面,值得深入阅读和学习。 通过理解和掌握AspectJ,开发者能够更有效地组织代码,提升代码质量和可维护性。对于大型复杂项目,...
当我们谈论"spring AspectJ aop学习"时,我们将深入探讨Spring AOP如何结合AspectJ来实现更灵活的模块化和解耦。 首先,让我们理解AOP的概念。面向切面编程(Aspect Oriented Programming)是一种编程范式,旨在将...
《AspectJ 1.9.6.jar:Java AOP编程的基石》 AspectJ是Java平台上的一种面向切面编程(AOP)框架,它允许开发者将关注点分离,提高代码的可维护性和可复用性。AspectJ 1.9.6.jar文件是AspectJ库的核心组成部分,它...
学习AspectJ,你需要理解其基本概念,并掌握如何定义和使用切面。同时,熟悉AspectJ的语法和工具,如ajc编译器和AspectJ Weaver,能让你在实际项目中更好地应用面向方面的编程。最后,实践是检验理论的最好方式,...
aspectj-1.7.0.jar aspectj的包
这个压缩包可能包含了AspectJ的完整源代码,方便开发者进行学习、调试和定制。 【描述】中的"建筑物"可能是指构建项目或构建过程,暗示了这个库不仅包含源代码,还可能包括构建脚本和依赖关系,使得开发者能够从...
AspectJ 是一个强大的面向切面编程(AOP)的框架,它允许开发者在Java应用程序中分离关注点,将横切逻辑(如日志、事务管理、安全性等)与核心业务逻辑相分离。`aspectj-1.6.9.jar` 是AspectJ框架的一个特定版本,即...
了解并熟练掌握AspectJ、AspectJRT 和 AspectWeaver 的基本概念和用法,对于深入学习Spring AOP和提升应用程序的可维护性至关重要。在实践中,初学者可以逐步通过编写简单的切面、配置织入方式,逐渐熟悉这些工具和...
6. **AspectJ语法**:学习AspectJ特有的语言特性,如`@Aspect`注解、`@Before`、`@After`等。 7. **集成开发环境支持**:了解如何在Eclipse或IntelliJ IDEA等IDE中配置AspectJ支持,以及如何使用AJDT(AspectJ ...
- **读者评价**:众多专业评论家和开发者对该书给予了高度评价,认为它是学习AspectJ的最佳指南之一。 #### 知识点四:书籍作者背景及其贡献 - **作者Ramnivas Laddad**:是AspectJ领域内的知名专家,具有丰富的...
通过分析和学习这个"Spacewar Example",开发者不仅可以了解AspectJ的基本语法和特性,还能掌握如何在实际项目中应用面向切面编程,提升代码的组织结构和可维护性。同时,对于游戏开发来说,这样的例子也是一个很好...
AspectJ是一种强大的面向切面编程(AOP)框架,它扩展了Java语言,允许开发者在不改变原有代码结构的情况下,插入关注点代码。在Spring AOP框架中,AspectJ被广泛用于实现更精细粒度的切面逻辑,提供比Spring默认的...
AspectJ和Spring的整合在Java开发中扮演着重要的角色,特别是在实现面向切面编程(AOP)时。AspectJ是一个强大的、成熟的库,它扩展了Java语言,允许开发者定义和执行切面,这是一种分离关注点的方式,使得业务逻辑...
压缩包内的"Manning@2003 - AspectJ In Action.pdf"是该书的电子版,读者可以从中学习到以下知识点: 1. 面向切面编程的基本理念和历史背景。 2. AspectJ语法和编程模型,包括定义切面、通知类型(before、after、...