基於JDK實現的動態代理demo
阿新 • • 發佈:2022-03-04
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);實現Animal介面的Pig類10 return foodName; 11 } 12 13 @Override 14 public int sleep(int time) { 15 System.out.println("睡了"+time); 16 return time; 17 } 18 }
package com.pojo.impl; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.Arrays;實現InvocationHandler介面的類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; } }
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); } }主方法內進行測試