spring aop demo

通過aop在目標邏輯代碼前後增加其他功能,先創建某個類用於某個功能。例如創建服務員,用來模擬服務功能。

 1 package AOPdemo;
 2 
 3 public class NaiveWaiter implements Waiter {
 4 
 5     @Override
 6     public void greetTo(String name) {
 7         System.out.println("greetTO "+name);
 8     }
 9 
10     @Override
11     public void serveTo(String name) {
12         System.out.println("serveTo "+name);
13     }
14 
15 }

此服務員並沒有禮貌語氣,通過aop添加禮貌功能,先模擬添加禮貌功能的代碼

 1 package AOPdemo;
 2 
 3 import java.lang.reflect.Method;
 4 
 5 import org.springframework.aop.MethodBeforeAdvice;
 6 
 7 public class GreetBeforeAdvice implements MethodBeforeAdvice {
 8 
 9     @Override
10     public void before(Method arg0, Object[] args, Object obj) throws Throwable {
11         
12         String client = (String)args[0];
13         System.out.println("welcome "+client);
14         
15     }
16 
17 }

此類通過實現MethodBeforeAdvice接口,重寫前置增強方法來實現功能。arg0是目標方法的全名,args是目標方法入參,obj是目標實例。

 1 package AOPdemo;
 2 
 3 import org.springframework.aop.framework.ProxyFactory;
 4 
 5 public class WaiterBerforeTest {
 6 
 7     public static void main(String[] args) {
 8         
 9         Waiter target = new NaiveWaiter();
10         
11         GreetBeforeAdvice advice = new GreetBeforeAdvice();
12         
13         ProxyFactory pf = new ProxyFactory();
14         
15         pf.setTarget(target);
16         
17         pf.addAdvice(advice);
18         
19         Waiter waiter = (Waiter)pf.getProxy();
20         waiter.greetTo("kobe");
21         waiter.serveTo("jordan");
22         
23     }
24     
25 }

上述代碼中使用ProxyFactory工廠創建代理對象,從而完成在目標方法上的增強,也可使用spring的配置方式來完成。

1      <!-- aop配置 -->
2      <bean id="target" class="AOPdemo.NaiveWaiter" ></bean>
3      <bean id="greetBeforeAdvice" class="AOPdemo.GreetBeforeAdvice"></bean>
4      
5      <bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean" 
6          p:proxyInterfaces="AOPdemo.Waiter"
7          p:interceptorNames="greetBeforeAdvice"
8          p:target-ref="target"
9      />

ProxyFactoryBean在內部使用ProxyFactory來完成。ProxyFactoryBean實現了FactoryBean來創建bean。

屬性介紹:proxyInterfaces,指定代理的接口

      interceptorNames,使用的增強

     target-ref,對目標實例進行處理


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章