一、接口实体类准备
public interface Study {
String read(String book);
}
public class Student implements Study {
private String name;
private Integer age;
@Override
public String read(String book) {
System.out.println("reading...." + book);
return "reading over";
}
}
二、创建代理工具类ProxyUtil
public class ProxyUtil {
public static Study createProxy(Student student){
//使用Proxy.newProxyInstance()方法需要三个参数
Study study = (Study)Proxy.newProxyInstance(
ProxyUtil.class.getClassLoader(),//参数一:指定类加载器
new Class[]{Study.class},//参数二:指定接口
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if(method.getName().equals("read")){
System.out.println("book coming....");
}
Object invoke = method.invoke(student, args); //invoke方法实际就是去调用Student实现类中的read方法
return invoke;//需要两个参数,参数一:指定一个对象去调用该方法,参数二:方法所需要的参数(无参为null)
}
});//参数三:具体实现逻辑
return study;
}
}
三、测试
public static void main(String[] args) {
Student s = new Student();
Study proxy = ProxyUtil.createProxy(s);
System.out.println(proxy.read("鲁滨逊漂流记"));
}
运行效果: