动态代理1

如何为Java对象创建一个代理对象?

在 Java 中,动态代理主要通过java.lang.reflect.Proxy

java.lang.reflect.InvocationHandler接口实现。

public staticObject newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

/**

* 参数一:用于执行 用哪个类加载器去加载生成的代理类。

* 参数二:用于指定代理类需要实现的接口: 明星类实现了哪些接口,代理类就实现哪些接口

* 参数三:用于指定代理类需要如何去代理(代理要做的事情)。

*/

java 复制代码
new InvocationHandler() {

                    @Override

                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                        // 用来声明代理对象要干的事情。

                        // 参数一: 当前创建的代理对象实例本身

                        // 参数二: method代表正在被代理的方法

                        // 参数三: args代表正在被代理的方法的参数

               Object result = method.invoke(s, args);

//  等价于直接调用s对象的该方法(比如s.doSomething(...))


                return result;

}

动态代理的工作原理:

  1. 当调用代理对象的方法时,实际上会调用InvocationHandlerinvoke方法
  2. invoke方法中,可以在调用原始对象方法的前后添加额外逻辑
  3. Proxy.newProxyInstance方法在运行时动态生成代理类的字节码
相关推荐
basketball6169 分钟前
C++ Lambda 表达式完全指南
开发语言·c++·算法
不知名的老吴10 分钟前
C++中emplace函数的不适场景总结(三)
开发语言·c++·算法
m0_7407963614 分钟前
golang如何实现工作流引擎_golang工作流引擎实现要点
jvm·数据库·python
Java面试题总结20 分钟前
Go 里什么时候可以“panic”?
开发语言·后端·golang
rit843249921 分钟前
基于MATLAB平台的指纹识别系统实现
开发语言·matlab
沐知全栈开发31 分钟前
TypeScript String
开发语言
zhaoyong22234 分钟前
CSS如何利用Less构建高度自定义组件_通过样式作用域防止冲突与溢出
jvm·数据库·python
2301_7815714238 分钟前
Less如何优化CSS文件大小_利用压缩配置去除冗余样式
jvm·数据库·python