spring里使用aop和代理实现目标对象增强示例
本例目标对象类MyDo.class,增强的目标是性能监控。代理类是MyDoAdvice.class,实现了org.aopalliance.intercept.MethodInterceptor(spring aop包下的)。
public class MyDo { public void doThing() { System.out.println("do thing"); } }
public class MyDoAdvice implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { long begin = System.currentTimeMillis(); Object proceed = invocation.proceed(); long end = System.currentTimeMillis(); System.out.println((end - begin) + "ms"); return proceed; } }
public class UseDo { public static void main(String[] args) { ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); MyDo myDo = classPathXmlApplicationContext.getBean(MyDo.class); ProxyFactory proxyFactory = new ProxyFactory(); proxyFactory.setTarget(myDo); proxyFactory.addAdvice(new MyDoAdvice()); MyDo myDoProxy = (MyDo) proxyFactory.getProxy(); myDoProxy.doThing(); } }