## 动态代理实现
> `JDK代理`
实现`InvocationHandler`接口并实现`invoke(Object proxy, Method method, Object[] args)`方法
ep:
~~~
public class StudentInvocation<T> implements InvocationHandler{
private T t;
public StudentInvocation(T t) {
this.t = t;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("-----方法执行前----");
System.out.println("方法名:"+method.getName());
Object result = method.invoke(t, args);
System.out.println("结果:"+ result);
System.out.println("-----方法执行后----");
return result;
}
/**
* 创建代理类
* @return
*/
public T createProxy() {
return (T) Proxy.newProxyInstance(t.getClass().getClassLoader(),
t.getClass().getInterfaces(), this);
}
}
~~~
> `CJLB代理`
实现`MethodInterceptor`并实现方法`intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3)`方法
ep:
~~~
public class CglbProxy implements MethodInterceptor {
@Override
public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
System.out.println("cglb执行前");
// Object invokeSuper = arg3.invoke(arg0, arg2);
Object invokeSuper = arg3.invokeSuper(arg0, arg2);
System.out.println("cglb执行后");
return invokeSuper;
}
/**
* 创建代理类
* @param clazz
* @return
*/
public Object createProxy(Class clazz) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(clazz);
enhancer.setCallback(this);
return enhancer.create();
}
}
~~~
**tip:注解的实现**
注解的实现也是用了代理类,其中会将在注解中设置的属性放入其实现代理类的`memberValues`字段中。
- 2111总结
- 1.面向对象
- 1.0.1 super()与this()的区别
- 1.0.2 private、default、protected、public的访问范围
- 1.0.3 continue、break、return区别
- 1.0.4 重载和重写的区别
- 1.0.5 final的特点
- 1.0.6 抽象类与接口的区别
- 1.0.7 java类型
- 1.0.8 什么是反射
- 1.0.9 类的加载机制
- 1.1.1 jvm内存结构
- 1.1.2 java垃圾回收机制
- 1.1.3 并发问题
- 1.1.3.1 线程的状态与关系
- 1.1.3.2 并发的三大性质
- 1.1.3.3 线程的实现与使用
- 1.1.3.4 线程池相关
- 1.1.3.5 并发相关方法
- 1.1.3.6 线程相关工具
- 1.1.4 jdk8特性
- 1.1.4.1 lambad表达式的使用
- 1.1.4.2 stream API
- 1.1.4.3 Optional容器使用
- 1.1.4.4 LocalDateTime
- 1.15 io流
- 1.16 动态代理实现
- 2.JavaEE
- 2.0.1 JSP四大作用域九大内置对象
- 2.0.2 cookie与session的区别
- 4.数据库相关
- 5.git版本管理
- 7.一些问题解决
- 7.1 分布式锁如何实现