AspectJ类名称模式
首先为了举例方便,先来个java的类
package simple.example;
class TestWildcard
{
private String userName;
private String city;
private void setUserName(String name)
{
username = name;
}
private void setCity(String city)
{
this.city = city;
}
public void setInfo(String name, String city)
{
setUserName(name);
setCity(city);
}
}
l *
1. *是一种能够用来匹配所有类型的特定类型的名称。
2. *能够匹配除了’.’以外的零个或多个符号哦。
例子:
1) call(private void TestWildcard .*(*))
匹配setUserName(String name)
setCity(String city)
注意:不匹配setInfo(String name, String city)的原因有二
它的访问类型是public
它有两个参数,而*只能匹配一个
2) call(* void TestWildcard .*(*))
匹配setUserName(String name)
setCity(String city)
注意:不匹配setInfo(String name, String city)的原因是其参数为两个
l ..
1. 这个符号既可以匹配任何字符序列,又可以充当通配符,以计算所匹配的参数中的 参数个数
2. 若不用于调用的参数部分或执行连接点中,则通配符”..”能够用来匹配任何以句点 开始和结束的字符序列。
例子:
假设如下的包层次:
com.company.department.room.class1
com.company.department.room.class2
com.company.departemnt.class3
1) com.company.department.room .* 匹配以上的class1和class2,使用*,系统将认为room和实际类之间没有类型。
2) com.company.department . * 匹配class3
3) com.company.departemnt ..* 匹配class1、class2、class3
4) private * com.company.departemnt ..*(..) 匹配com.company.departemnt包层次下的所有似有方法,这些方法可以有任何类型和任何个数的参数。
l +
该通配符可以匹配一个类型层次,而不是单个的类。
假设有如下类:
public class DVD
public class SpecialDVD extends DVD
那么call( DVD.new(..))将只能匹配DVD类的构造函数,而无法找到其子类SpecialDVD的构造函数。
call( DVD+.new(..))可以用来匹配DVD类和所有子类的构造函数。
call(public String DVD+.set* (String)) 可以用来匹配DVD类层次中所有名称以set开始的方法。