Java Proxy 和 CGLIB 动态代理原理

2019-05-04  本文已影响0人  浪白条

Java Proxy

首先实现一个InvocationHandler,方法调用会被转发到该类的invoke()方法。

然后在需要使用Hello的时候,通过JDK动态代理获取Hello的代理对象。

// Java Proxy

// 1. 首先实现一个InvocationHandler,方法调用会被转发到该类的invoke()方法。

classLogInvocationHandler implementsInvocationHandler{

    ...

    privateHello hello;

    publicLogInvocationHandler(Hello hello) {

        this.hello = hello;

    }

    @Override

    publicObject invoke(Object proxy, Method method, Object[] args) throwsThrowable {

        if("sayHello".equals(method.getName())) {

            logger.info("You said: "+ Arrays.toString(args));

        }

        returnmethod.invoke(hello, args);

    }

}

// 2. 然后在需要使用Hello的时候,通过JDK动态代理获取Hello的代理对象。

Hello hello = (Hello)Proxy.newProxyInstance(

    getClass().getClassLoader(), // 1. 类加载器

    newClass<?>[] {Hello.class}, // 2. 代理需要实现的接口,可以有多个

    newLogInvocationHandler(newHelloImp()));// 3. 方法调用的实际处理者

System.out.println(hello.sayHello("I love you!"));

http://www.importnew.com/27772.html

上一篇 下一篇

猜你喜欢

热点阅读