在下面的代码片段中,每当访问属性myList时,我都需要执行一些逻辑.可能吗?
public class Test {
public static List<String> myList = new ArrayList();
public static void addData(){
myList.add("foo");
myList.add("bar");
}
public static void removeData(){
if(myList.size() > 0){
myList.remove(0);
}
}
public static void displayData(){
for (String data : myList) {
System.out.println("data : "+data);
}
}
public static void main(String[] args) {
addData();
displayData();
removeData();
displayData();
}
}
解决方法:
您可以使用以下切入点编码代码前/后/周围对您的字段的任何访问:
@Aspect
public class TestAccessorsAspect {
@Pointcut("get(java.util.List com.sample.Test.myList)")
public void readMyList(){}
@Pointcut("set(java.util.List com.sample.Test.myList)")
public void writeMyList(){}
}
在.aj语法中,这可能如下所示:
public aspect TestAccessorsAspect {
pointcut readMyList() : get(java.util.List com.sample.Test.myList);
pointcut writeMyList() : set(java.util.List com.sample.Test.myList);
}
每当访问这些字段进行读取(分别写入)时,这些切入点将被触发.