其他分享
首页 > 其他分享> > 基于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);
    }
}
主方法内进行测试

 

标签:JDK,demo,Object,代理,pojo,Animal,import,com,public
来源: https://www.cnblogs.com/yxby/p/15966076.html