静态普通方法名匹配切面

来源:互联网 发布:java疯狂讲义txt下载 编辑:程序博客网 时间:2024/06/10 22:44

1、目标类


public class Seller {public void greetTo(String name) {System.out.println("seller greet to "+name+"...");}}
public class Waiter {public void greetTo(String name) {System.out.println("waiter greet to "+name+"...");}public void serveTo(String name){System.out.println("waiter serving "+name+"...");}}



2、增强类

public class GreetingBeforeAdvice implements MethodBeforeAdvice {public void before(Method method, Object[] args, Object obj) throws Throwable {String clientName = (String)args[0];System.out.println(obj.getClass().getName()+"."+method.getName());System.out.println("How are you!Mr."+clientName+".");}}


3、代理类


public class GreetingAdvisor extends StaticMethodMatcherPointcutAdvisor {public boolean matches(Method method, Class clazz) {return "greetTo".equals(method.getName());}    /*     * 在默认的情况下,StaticMethodMatcherPointcutAdvisor抽象类匹配     * 所有的类     */public ClassFilter getClassFilter() {return new ClassFilter() {public boolean matches(Class clazz) {return Waiter.class.isAssignableFrom(clazz);}};}}


4、配置文件


<!-- 普通方法名匹配切面 --><bean id="waiterTarget" class="com.baobaotao.advisor.Waiter" /><bean id="sellerTarget" class="com.baobaotao.advisor.Seller" /><bean id="greetingAdvice" class="com.baobaotao.advisor.GreetingBeforeAdvice" /><!-- 注入一个前置增强 --><bean id="greetingAdvisor" class="com.baobaotao.advisor.GreetingAdvisor"p:advice-ref="greetingAdvice" />    <!--                        因为需要为waiter和seller两个Bean定义代理器,两者有许多的共同配置信息,使用父Bean简化配置     --><bean id="parent" abstract="true"class="org.springframework.aop.framework.ProxyFactoryBean"p:interceptorNames="greetingAdvisor" p:proxyTargetClass="true" /><!-- 引用父Bean定义了两个切面的代理 --><bean id="waiter" parent="parent" p:target-ref="waiterTarget" /><bean id="seller" parent="parent" p:target-ref="sellerTarget" />


5、测试类


String configPath = "com/baobaotao/advisor/beans.xml";ApplicationContext ctx = new ClassPathXmlApplicationContext(configPath);Waiter waiter = (Waiter)ctx.getBean("waiter");Seller seller = (Seller)ctx.getBean("seller");waiter.greetTo("John");waiter.serveTo("John");seller.greetTo("John");

输出结果如下:

com.baobaotao.advisor.Waiter.greetToHow are you!Mr.John.waiter greet to John...waiter serving John...seller greet to John...




















0 0
原创粉丝点击