1. 程式人生 > 其它 >基於JDK實現的動態代理demo

基於JDK實現的動態代理demo

1 package com.pojo;
2 
3 public interface Animal {
4     String eat(String foodName);
5     int sleep(int time);
6 }
Animal介面
 1 package com.pojo.impl;
 2 
 3 import com.pojo.Animal;
 4 
 5 public class Pig implements Animal {
 6 
 7     @Override
 8     public String eat(String foodName) {
 9         System.out.println("吃了"+foodName);
10 return foodName; 11 } 12 13 @Override 14 public int sleep(int time) { 15 System.out.println("睡了"+time); 16 return time; 17 } 18 }
實現Animal介面的Pig類
package com.pojo.impl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Arrays;


public class ProxyPig implements InvocationHandler { private Object obj; public ProxyPig(Object obj){ this.obj = obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //方法之前做一個處理 System.out.println("方法之前執行......\t"+method.getName()+"\t"+Arrays.toString(args));
//被增強的方法 Object value = method.invoke(obj,args); //方法之後執行 System.out.println("方法之後執行\t"+value); return value; } }
實現InvocationHandler介面的類
package testMain;

import com.pojo.Animal;
import com.pojo.impl.Pig;
import com.pojo.impl.ProxyPig;
import java.lang.reflect.Proxy;

public class Main {
    public static void main(String[] args) {
        Class[] c = {Animal.class};

        Animal pigAnimal = (Animal) Proxy.newProxyInstance(Pig.class.getClassLoader(), c, new ProxyPig(new Pig()));

        pigAnimal.eat("包子");
        pigAnimal.sleep(1000);
    }
}
主方法內進行測試