-
2004-08-20
简单介绍AspectJ的高级特性(二)
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://befresh.blogbus.com/logs/339330.html
三、Aspect association
在Java中,为了节省对象每次构建的耗费,增加效率,很多人会考虑使用Singleton模式,让jvm中只有一个实例存在。AspectJ当然为我们考虑到这个问题,Aspect association实际上就是aspect与advised join point object的一种关联关系,这很类似于OO中association,譬如1:1,1:m等。Aspect association能让我们能更好地控制aspect的状态信息。
在AspectJ中可以把Aspect association大致分为三类:
1、Per virtual machine (default)
一个jvm中只有一个aspect instance,AspectJ默认association。
2、Per object
每一个advised join point object都会产生一个aspect instance,不过同一个object instance只会产生一个aspect instance。
3、Per control-flow association
这种association稍微复杂一些,它主要针对程序调用的控制流,譬如:A方法调用B方法,B方法又调用C方法,这就是control-flow。
在aspect中声明这三种association非常简单,它的主要语法如下:
aspect <AspectName> [<association-specifier>(<Pointcut>)] {
... aspect body
}Per virtual machine是aspectj的默认association,不需要你额外的声明,正常使用即可。
Per object主要有两种方式:perthis()和pertarget()。perthis()主要用于execution object,pertarget()主要用于target object,两者非常类似。
Per control-flow中也包含两种方式:percflow()和percflowbelow()。这两者也很类似,只是两者的control-flow不太一样而已。
维护aspect的状态信息还有一种方法,就是使用introduce。可以在aspect中introduce member fields,通过fields来保存状态信息。
随机文章:
AspectJ's declare的四种用法 2004-08-23简单介绍AspectJ的高级特性(三) 2004-08-21简单介绍AspectJ的高级特性(一) 2004-08-19AOP and annotations 2004-05-18Nanning 2004-03-19
收藏到:Del.icio.us







