前言:
本人之前学习过很多关于jdk动态代理的知识,但是到头来就是不清楚应用场景是什么,究竟该怎么用。有关公司java培训的内容中,老大总是说要对难的技术敢于用,自己在写代码的时候学习、实践一下。本人有两三年开发经验,却一直没有手写过jdk动态代理,实属遗憾,特此写下学习的总结
为什么要学习jdk动态代理
1、为了装X,给小白看代码时,很有大佬的感觉,就喜欢给他们看不懂的代码
2、代码增强,实现权限校验、日志记录等功能
3、看不懂其他人写的牛B代码,但是需要调用他,在其基础上进行其他操作时
基本概念
**Proxy类:**这是一个jdk自带的写好的类,主要就是用于jdk动态代理吧,里面有一个静态方法newProxyInstance()方法,用于创建代理的对象
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
loader:类加载器,固定写法,不懂不用去追究,等到了一定开发经验自然知道
interfaces:代理的接口,可以是多个接口
InvocationHandler:拦截处理器,就是待会我们自己写的子类
**InvocationHandler类:**这是我们动态代理生成的模板,需要重写里面的invok方法
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
proxy:代理对象
method:代理对象里面的方法
args:方法的参数
环境准备
现在有一个需求,编写一个查询学生的接口,我这里定义了student类,proxyService接口以及该实现类ProxyServiceImpl还有调用类ProxyController
student:
public class Student {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this