切点类型
切面类型
静态方法切点 动态方法切点 注解切点 表达式切点 流程切点 复合切点
切面类型
切面类型
Advisor:一般切面 PointcutAdvisor:具有切点的切面 IntroductionAdvisor:引介切面
静态普通方法名匹配切面
public class Waiter {
public void greetTo (String name){
System.out .println("waiter greet to " + name + "..." );
}
public void servTo (String name){
System.out .println("waiter serving " + name + "..." );
}
}
public class Seller {
public void greetTo (String name){
System.out .println("seller greet to " +name+"..." );
}
}
public class GreetingAdvisor extends StaticMethodMatcherPointcutAdvisor {
public boolean matches (Method method, Class<?> aClass) {
return "greetTo" .equals(method.getName());
}
public ClassFilter getClassFilter (){
return new ClassFilter(){
public boolean matches (Class<?> aClass) {
return Waiter.class.isAssignableFrom(aClass);
}
};
}
}
public class GreetingBeforeAdvice implements MethodBeforeAdvice {
public void before (Method method, Object[] args, Object target) throws Throwable {
System.out.println(target.getClass().getName()+"." +method.getName());
String clientName = (String)args[0 ];
System.out.println("How are you!Mr." +clientName+"." );
}
}
<bean id ="waiterTarget" class ="com.smart.advisor.Waiter" />
<bean id ="sellerTarget" class ="com.smart.advisor.Seller" />
<bean id ="greetingAdvice" class ="com.smart.advisor.GreetingBeforeAdvice" />
<bean id ="greetingAdvisor" class ="com.smart.advisor.GreetingAdvisor"
p:advice-ref ="greetingAdvice" />
<bean id ="parent" abstract="true" class ="org.springframework.aop.framework.ProxyFactoryBean"
p:interceptorNames="greetingAdvisor"
p:proxyTargetClass="true" />
<bean id ="waiter" parent="parent" p:target-ref ="waiterTarget" />
<bean id ="seller" parent="parent" p:target-ref ="sellerTarget" />
StaticMethodMatcherPointcutAdvisor