书山有路勤为径,学海无涯苦作舟
一. 捕获对构造函数的调用 使用Call(Signature)写入点,它带有额外的new关键字作为签名的一部分。使用与构造函数有关的call(Signature)切入点的语法如下: pointcut <pointcut name>(<any values to be picked up>): call(<optional modifier> <class>.new(<parameter types>));
在用于捕获对构造函数的调用时,call(Signature)切入点具有3个关键特征: 1.在把一个类实例化成一个对象时,具有new关键字的call(Signature)切入点会捕获连接点。 2.通过使用around()形式的通知,call(Signature)写入点可以在Java的正常继承规则的限制下重写返回对象的类型。 3.编译器不会检查指定的Signature是否对应于实际的构造函数。
二. 在执行构造函数时捕获它 使用execution(Signature)切入点,它带有额外的new关键字作为签名的一部分。使用与构造函数有关的execution(Signature)切入点的语法如下: pointcut <pointcut name>(<any values to be picked up>):execution(<optional modifier> <class>.new<parameter types>));
在用于捕获构造函数的执行时,execution(Signature)切入点具有3个关键特征: 1.在执行类的构造函数时,具有new关键字的execution(Signature)切入点会触发连接点。 2.不能在调用类的构造函数之前那一刻触发连接点。这会阻止重写返回的对象。 3.可以使用around()通知来重写构造函数方法的实现,当不能重写正在构造的对象的类型。
三. 捕获何时初始化对象 使用initialization(Signature)切入点。initialization(Signature)切入点的语法如下: pointcut <pointcut name>(<any values to be picked up>):initialization(<optional modifier> <class>.new<parameter types>));
initialization(Signature)切入点具有5个关键特征: 1.initialization(Signature)切入点必须包含new关键字。 2.initialization(Signature)切入点捕获连接点发生在任何超类的初始化之后,以及从构造函数方法返回之前。 3.Signature必须解析成特定类的构造函数,而不是一个简单的方法。 4.initialization(Signature)切入点提供了编译时的检查,用于检查构造函数是否正在被引用。 5.由于AspectJ编译器中的编译器限制,当与around()通知关联时,不能使用initialization(Signature)切入点。
四. 捕获何时将要初始化一个对象 使用preinitialization(Signature)切入点。preinitialization(Signature)切入点的语法如下: pointcut <pointcut name>(<any values to be picked up>):preinitialization(<optional modifier> <class>.new<parameter types>)); preinitialization(Signature)切入点具有5个关键特征: 1.preinitialization(Signature)切入点必须包含new关键字。 2.preinitialization(Signature)切入点捕获连接点发生在进入捕获构造函数之后,以及调用任何超类构造函数之前。 3.Signature必须解析成一个构造函数。 4.preinitialization(Signature)切入点提供了编译时的检查,用于检查构造函数是否正在被引用。 5.由于AspectJ编译器中的编译器限制,当与around()通知关联时,不能使用preinitialization(Signature)切入点。
五. 捕获何时初始化类 使用staticinitialization(TypePattern)写入点。staticinitialization(TypePattern)写入点的语法如下: pointcut <pointcout name>(<any values to be picked up>) : staticinitialization(<class>);
staticinitialization(TypePattern)切入点具有两个关键特征: 1.对可供staticinitialization(TypePattern)切入点所选通知使用的环境有一些限制。没有父对象触发静态初始化;因此,没有this引用。也不涉及实例对象,因此,没有目标引用。 2.TypePattern可以包含通配符,用于选择一系列不同的类。
posted on 2008-08-22 10:32 Brian 阅读(1227) 评论(0) 编辑 收藏 所属分类: 《AspectJ Cookbook》读书笔记