Java动态代理

在我们日常开发中,代理模式是一个非常常见的模式。动态代理时jdk中自带的,可以非常方便的在原有的功能上添加一些我们自己的功能。

什么是代理

就是为其他对象提供一个代理以控制被代理对象的访问。

动态代理

利用Java的反射机制,在运行时创建代理类。

public interface DoSomethingService {
    String sayHello(String name);
}

public class DoSomethingImpl implements DoSomethingService{
    @Override
    public String sayHello(String name){
        return "Hello, " + name;
    }
}

public class ProxyHandler implements InvocationHandler {
    private Object object;
    public ProxyHandler(Object object) {
        this.object = object;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before invoke:" + method.getName());
        Object invoke = method.invoke(this.object, args);
        System.out.println("After invoke: " + method.getName());
        System.out.println("Answer: " + invoke);
        return invoke;
    }
}

    @Test
    public void testProxy(){
        DoSomethingService doSomething = new DoSomethingImpl();

        ProxyHandler proxyHandler = new ProxyHandler(doSomething);
        DoSomethingService proxyClass = (DoSomethingService)Proxy.newProxyInstance(doSomething.getClass().getClassLoader(), doSomething.getClass().getInterfaces(), proxyHandler);
        String ans = proxyClass.sayHello("Hardy");
        System.out.println(ans);
    }
posted @ 2022-08-23 22:19  永和九年  阅读(34)  评论(0)    收藏  举报