捕获属性上的连接点
AspectJ提供了get(Signature)
和set(Signature)
切入点的形式,来捕获可能发生在类属性上的任何访问和修改。这也是AspectJ的一个比较受争议的特性,因为它会有效地破坏类的封装性,特别是当把被监视的属性声明为protected
或者private
时。
所以这两个属性可以提供强大的手段来通知类,但是必须小心地使用它们。
0.捕获对属性的访问
我们使用get(Signature)
切入点来捕获对对象属性的访问。切入点的语法如下:
pointcut [切入点名字](想要捕获的参数): get(<可选的修饰符> 属性类型 类名.属性名)
需要注意的几点是:
get(Signature)
切入点会捕获对属性的直接访问,不仅仅只会捕获对属性getter
访问器方法的调用。get(Signature)
切入点不能捕获对常量的访问。Signature
必须解析成特定类的属性。Signature
可以包含通配符,用于选择不同属性上的一系列连接点。
我们在Test7
包下做一个简单的测试。首先新建业务类Service
:
package Test7;
public class Service {
protected static String name = "Gavin John";
public static final String nickname = "GG";
private String firstname = "Gavin";
private String lastname = "John";
public String getFirstname() {
return