JDK动态代理原理解析
本文章不介绍什么是动态代理,而是讲解原理
Demo代码
我有一个Animal接口
public interface Animal {
void eat();
}
有一个Dog类实现了Animal接口
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("animal eat...");
}
}
现在我想调用eat方法之前打印日志"before",之后打印"after", 我的代码如下
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author hh
* @date 2020/9/29
*/
public class JdkProxyDemo implements InvocationHandler {
static Animal animal = new Dog();
public static void main(String[] args) {
Animal proxyAnimal = (Animal) Proxy.newProxyInstance(
JdkProxyDemo.class.getClassLoader(),
new Class[]{
Animal.class},
new JdkProxyDemo());
System.out.println(proxyAnimal.getClass().getName());
proxyAnimal.eat()