在上一篇中,咱们用JDK动态代理和CgLib实现了例子中的业务逻辑。那么若是用Spring,如何实现呢? 上一篇:http://my.oschina.net/lfy2008/blog/663999spring
咱们依然有上一章的原材料:ide
加强的横切逻辑:Advice 加强类型能够分为:.net
咱们知道,CheckTicket中的方法调是在在TakingTrain的方法以前。那么,咱们能够让CheckTicket实现前置加强的接口:代理
public class CheckTicketAdvice implements MethodBeforeAdvice{ @Override public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println("please show your tickes"); } }
spring如何将这个前置加强放到咱们的业务类里面呢? Spring中为咱们提供了ProxyFactory来做为代理的工厂类,无论是使用的JDK动态代理仍是CgLib动态代理。你在调用的时候几乎没有区别。 具体能够参考Spring的相关源码: code
@Test public void testAdivice(){ ProxyFactory factory = new ProxyFactory(); TakingTrain trainImpl = new TakingTrainImpl(); factory.setTarget(trainImpl); factory.addAdvice(new CheckTicketAdvice()); TakingTrainImpl proxy = (TakingTrain) factory.getProxy(); try { proxy.takeTrain("test"); } catch (RestException e) { } }
注意:以上代码Spring使用Cglib实现,若是给factory添加:factory.setInterfaces(trainImpl.getClass().getInterfaces()) 则会调用jdk动态代理。blog
打印:接口
please show your tickes Hi test Welcome to take the train