springAOP祕書老總案例

2020-10-11 11:00:35

要想完成這個案例,首先了解,什麼是AOP

在這裡插入圖片描述

在這裡插入圖片描述

如上圖,有兩個類,A類和B類。

我們可以通過AOP,實現在使用A類的methodA方法之前,先呼叫B類的methodb1()方法,然後再執行自己的mehodA()方法,再呼叫B類的methodb2()方法。

在瞭解了AOP的概念知道呢,我們就可以來對該案例進行分析了
在這裡插入圖片描述

如上圖,我們想要在老總類呼叫eat()吃的方法時,祕書類先呼叫自己的daojiu()倒酒方法,然後老總類再呼叫自己的eat()方法,最後祕書類再呼叫自己的huazi()方法.

思維導圖:
在這裡插入圖片描述

程式碼如下:

ILaoZong

package com.lbl.proxy;

public interface ILaoZong {
    void eat();
}

LaoZongImpl

package com.lbl.proxy;

public class LaoZongImpl implements ILaoZong {
    @Override
    public void eat() {
        System.out.println("吃三下鍋");
    }
}

MiShu

package com.lbl.proxy;

public class MiShu {
    public void dianyan(){
        System.out.println("點菸");
    }
    public void daojiu(){
        System.out.println("倒酒");
    }

}

proxyTest

@Test
public void test01(){
    LaoZongImpl laoZong = new LaoZongImpl();
    MiShu miShu = new MiShu();
    ClassLoader classLoader=LaoZongImpl.class.getClassLoader();
    Class[] interfaces = {ILaoZong.class};
    InvocationHandler handler=new InvocationHandler() {
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            miShu.daojiu();
            Object returnVal = method.invoke(laoZong, args);
            miShu.dianyan();
            return returnVal;
        }
    };
    ILaoZong iLaoZong = (ILaoZong) Proxy.newProxyInstance(classLoader,interfaces , handler);
    iLaoZong.eat();
}

執行結果:

在這裡插入圖片描述