spring aop demo

前置加強:java

經過aop在目標邏輯代碼先後增長其餘功能,先建立某個類用於某個功能。例如建立服務員,用來模擬服務功能。spring

 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添加禮貌功能,先模擬添加禮貌功能的代碼ide

 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是目標實例。spa

 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。code

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

      interceptorNames,使用的加強blog

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

後置加強:get

 1 package AOPdemo;
 2 
 3 import java.lang.reflect.Method;
 4 
 5 import org.springframework.aop.AfterReturningAdvice;
 6 
 7 public class GreetAfterAdvice implements AfterReturningAdvice {
 8 
 9     @Override
10     public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
11         
12         System.out.println("please enjoy yourself");
13         
14     }
15 
16 }
1      <bean id="target" class="AOPdemo.NaiveWaiter" ></bean>
2      <bean id="greetBeforeAdvice" class="AOPdemo.GreetBeforeAdvice"></bean>
3      <bean id="greetAfterAdvice" class="AOPdemo.GreetAfterAdvice" ></bean>
4      
5      <bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean" 
6          p:proxyInterfaces="AOPdemo.Waiter"
7          p:interceptorNames="greetBeforeAdvice,greetAfterAdvice"
8          p:target-ref="target"
9      />
相關文章
相關標籤/搜索