动态代理
主类
package com.cxl.proxy;
import java.lang.reflect.Proxy;
public class StudentMain {
public static void main(String[] args) {
Student student = new Student();
student.study();//我爱学习
// 接下来进行动态代理
/*
* 第一个参数 - 类加载器:和被代理对象使用相同的类加载器
* 第二个参数 - 接口类型Class数组:和被代理对象使用相同的接口
* 第三个参数 - 代理规则:完成代理增强功能
*/
StudentInterface newProxyInstance =
(StudentInterface) Proxy.newProxyInstance(student.getClass().getClassLoader()
, new Class[]{StudentInterface.class}
, (proxy, method, args1) -> {
// 执行student所有的方法都会从这里经过
// 只获取study的方法
if (method.getName().equals("study")) {
System.out.println("其实我不爱学习");
return null;
} else return method.invoke(student, args1);
});
newProxyInstance.study();//其实我不爱学习
}
}
StudentInterface 接口
package com.cxl.proxy;
public interface StudentInterface {
void study();
}
Student 类,实现StudentInterface接口
package com.cxl.proxy;
public class Student implements StudentInterface{
@Override
public void study() {
System.out.println("我爱学习");
}
}