每一个advisor中一般只定义一个切入点,如果有这样的需求,我们相对一个类中的getter和setter方法都进行通知,一般来说只能定义两个切入点来实现,但没有一个切入点可以同时处理两个,当然,我们可以利用新的逻辑创建一个切入点,但更好的方式是使用ComposablePointcut组合切入点,利用他的切入点union(交集)和intersection(并集)的特性组合两个切入点
union和 intersection方法的参数是ClassFilter和MethodMatcher参数
调用接受MethodMathcher的union()方法将ComposablePointCut的MethodMatcher改为一个UnionMethodMathcer,他包含现有的MethodMatcher和union()的MethodMatcher的并集,当任何一个返回true时候,则UnionMethodMathcer返回true,参数ClassFilter也会生成类似的结构
intersection原理和union类似,只是当两个MethodMathcer全部为true方返回true
BeanOne.java
package
ch6.SimpleAOP.MethodMatchNamePointCut;
public class BeanOne ... {
public void foo()...{
System.out.println("foo-no-arg");
}
public void foo(int a)...{
System.out.println("foo-with-arg");
}
}
public class BeanOne ... {
public void foo()...{
System.out.println("foo-no-arg");
}
public void foo(int a)...{
System.out.println("foo-with-arg");
}
}
SimpleAdvise.java
package
ch6.SimpleAOP.MethodMatchNamePointCut;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;