在上一篇中,咱們用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