1. 程式人生 > 其它 >java動態代理實現demo

java動態代理實現demo

java動態代理實現demo

1.建立介面:

/**
 * @author JingZhe  @time 2021/10/20 9:45
 */
public interface Person {
    /** 測試方法 */
    void doSomething();
}

2.建立介面的實現類:

/**
 * @author JingZhe  @time 2021/10/20 9:48
 */
public class JingZhe implements Person {

    @Override
    public void doSomething() {
        System.out.println("jingZhe doing Something
"); } }

3.建立動態代理類:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author JingZhe  @time 2021/10/20 9:44
 */
public class JDKDynamicProxy implements InvocationHandler {

    /** 宣告被代理的物件 */
    private Person person;

    /** 建構函式 */
    public
JDKDynamicProxy(Person person) { this.person = person; } /** 獲取代理物件 */ public Object getProxy() { Object proxyInstance = Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(), this); return proxyInstance; } @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("對原方法進行了前置增強"); // 原方法執行 Object invoke = method.invoke(person, args); System.out.println("對原方法進行了後置增強"); return invoke; } }

4.編寫測試類:

/**
 * @author JingZhe  @time 2021/10/20 9:46
 */
public class proxyTest {
    public static void main(String[] args) {

        System.out.println("不使用代理類,呼叫doSomething");
        Person person = new JingZhe();
        person.doSomething();

        System.out.println("--------------------------");

        System.out.println("使用代理類,呼叫doSomething");
        Person proxy = (Person) new JDKDynamicProxy(new JingZhe()).getProxy();
        proxy.doSomething();

    }
}

測試結果:

不使用代理類,呼叫doSomething
jingZhe doing Something
--------------------------
使用代理類,呼叫doSomething
對原方法進行了前置增強
jingZhe doing Something
對原方法進行了後置增強

以上。