package com.denny_blue.springdemo.aop;
import java.util.HashSet;
import java.util.Set;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MyAroundAdvice implements MethodInterceptor {
private Set customers=new HashSet(); //保存購過書的顧客信息
public Object invoke(MethodInvocation invocation) throws Throwable {
String customer=(String)invocation.getArguments()[0];
if(customers.contains(customer)){
throw new BuyBookException("對不起,一名顧客只能買一本打折書!");
}
Object result=invocation.proceed(); //調用MyBuyBook中的buyBook方法,即真實操作
customers.add(customer);
return result;
}
}
好了,最后一個,異常增強,當顧客要買< spring in action>時,我們的書店沒書了,請倉庫部門趕快訂貨!
package com.denny_blue.springdemo.aop;
import org.springframework.aop.ThrowsAdvice;
public class MyThrowsAdvice implements ThrowsAdvice {
public void afterThrowing(NoThisBookException e){ //可以定義多個方法,只要傳入的參數是不同異常
System.out.print("通知倉庫,趕緊加訂書!");
}
}
好了沒?還沒,我們需要一個XML文件來組裝這些對象,來代理業務接口,完整的beans.xml如下,各元素的含義請自己查看spring reference
?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
< beans>
< bean id="myBuyBookTarget" class="com.denny_blue.springdemo.aop.MyBuyBook"/>
< bean id="myBeforeAdvice" class="com.denny_blue.springdemo.aop.MyBeforeAdvice"/>
< bean id="myAroundAdvice" class="com.denny_blue.springdemo.aop.MyAroundAdvice"/>
< bean id="myAfterAdvice" class="com.denny_blue.springdemo.aop.MyAfterAdvice"/>
< bean id="myThrowsAdvice" class="com.denny_blue.springdemo.aop.MyThrowsAdvice"/>
< bean id="buyBook" class="org.springframework.aop.framework.ProxyFactoryBean">
< property name="proxyInterfaces">
文章來源于領測軟件測試網 http://www.kjueaiud.com/