Java动态代理入门

今天学习了Java的动态代理的使用方法。具体方法如下:

package com.meiran.proxy;

import org.junit.Test;

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

/**
 * 简单的动态代理
 */
public class ProxyTest {

    @Test
    public void test() {
        ClassLoader classLoader = ProxyTest.class.getClassLoader();
        Class[] interfaces = {Waiter.class};
        InvocationHandler myInvocation = new MyInvocationHandler();
        Waiter proxyInstance = (Waiter) Proxy.newProxyInstance(classLoader, interfaces, myInvocation);
        proxyInstance.serve();
        String result = proxyInstance.testString();
        System.out.println(result);
        proxyInstance.testParam("123");
    }

    class MyInvocationHandler implements InvocationHandler {
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            System.out.println(method.getName() + "调我了!");
            return "test";
        }
    }
}



调用结果:

serve调我了!
testString调我了!
test
testParam调我了!


代码执行原理是:使用调用类的类加载器,通过InvocationHandler的实现类,覆写invoke方法,达到增强原接口实现类的方法。每个代理对象调用方法时,均会调用invoke方法,并将返回值返回。




你可能感兴趣的:(JAVA)