JAVA_動態代理AOP切面程式設計

deeply發表於2021-09-09

package staticProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;interface Human {    void info();    void fly();}// 被代理類class SuperMan implements Human {    public void info() {        System.out.println("我是SuperMan!");    }    public void fly() {        System.out.println("I believe I can fly!");    }}class HumanUtil {    public void method1() {        System.out.println("============方法一============");    }    public void method2() {        System.out.println("============方法二============");    }}class MyInvocationHandler implements InvocationHandler {    Object obj;// 被代理類物件的一個宣告    public void setObject(Object object) {        this.obj = object;    }    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        HumanUtil h = new HumanUtil();        h.method1();        Object returnVal = method.invoke(obj, args);        h.method2();        return returnVal;    }}class MyProxy {    // 動態的建立一個代理類的物件    public static Object getProxyInstance(Object obj) {        MyInvocationHandler handler = new MyInvocationHandler();        handler.setObject(obj);        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), handler);    }}public class DynamicProxyAOP {    public static void main(String[] args) {        SuperMan man = new SuperMan();//建立一個被代理類的物件        Object obj = MyProxy.getProxyInstance(man);//返回一個代理類的物件        Human hu = (Human)obj;        hu.info();//透過代理類的物件呼叫重寫的抽象方法        System.out.println();        hu.fly();    }}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1978/viewspace-2813073/,如需轉載,請註明出處,否則將追究法律責任。

相關文章