spring aop demo
Posted lsy-lsy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,对目标实例进行处理
以上是关于spring aop demo的主要内容,如果未能解决你的问题,请参考以下文章