您的位置:首页 > 娱乐 > 八卦 > 免费跨境电商平台入驻_官方回应网传上海有疫情_中国第一营销网_手机如何建网站

免费跨境电商平台入驻_官方回应网传上海有疫情_中国第一营销网_手机如何建网站

2025/4/5 13:43:09 来源:https://blog.csdn.net/2301_81155391/article/details/146515721  浏览:    关键词:免费跨境电商平台入驻_官方回应网传上海有疫情_中国第一营销网_手机如何建网站
免费跨境电商平台入驻_官方回应网传上海有疫情_中国第一营销网_手机如何建网站

前言:

java的动态代理是指进行明确的分工的操作(多接口  比如我是酒店的老板  有人找我合作 需要先经过前台 我的助理  而不是直接找我)

序列化 :为什么序列化  序列化的对象是一个类 我们也叫对象   class一堆东西里面有很多函数方法 假如我现在是app我想调用web上写好的一个对象 我不能直接把那个对象传输过来吧  

因为这个对象在web上假如web使用的是php那他不认识啊  这个时候就需要序列化一下 把他序列化成方便传输的形式  从而实现互通  对方反序列之后就能直接使用

记住java反序列的流程  :  序列化的 对象是 一个对象   结果是输出一个装着对象的文件

反:对象是一个文件  目标是一个对象

动态代理的实现

public interface User {   //创建一个接口void sayxiaodi(String name,int money);}

上边这个是接口  下面这个是创建的使用

public class UserImpt implements User{   //创建类调用User接口@Overridepublic void sayxiaodi(String name,int money) {  //使用接口的sayxiaodi方法System.out.println("hi "+name+",i want sign up");  //name是最后实现的时候  用户设置的System.out.println("i have paid "+money);    //这个是用户的缴费}
}

反射方法获取  实例化接口的类

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//因为是反射 调用其他的类所以要使用   invoke接口
public class UserImptInhander implements InvocationHandler {private Object target;public UserImptInhander(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("hello,i am "+args[0]);            //这个是接口被触发的时候就会显示Object invoke = method.invoke(target, args);        //使用    UserImpt  的类内的方法System.out.println("okay,you are my baby");return invoke;}
}

调用接口

import java.lang.reflect.Proxy;public class UserProxy  {public static void main(String[] args) {// 创建目标对象User user = new UserImpt();// 创建 userImptInhanderUserImptInhander userImptInhander = new UserImptInhander(user);// 创建代理对象User proxy=(User)Proxy.newProxyInstance(UserImpt.class.getClassLoader(),new Class<?>[]{User.class},userImptInhander);proxy.sayxiaodi("xiaodi",3000);  //用户的设置proxy.sayxiaodi("moonsec",5000);}}

我们运行代理

这个就是自动回复的使用  

看一下调用的顺序

打个断点然后点击上面的蜘蛛

然后点f7进行步入

invoke()这个函数就是出现在反射机制中   用户调用其他类的方法

arg[0] 就是表示参数

为什么学这个动态的代理:主要是了解链:许多链就是调用使用接口的一些类  然后如果其他的类中有

Runtime.getRuntime().exec("calc");

那就能触发命令执行   

因为看到了他的跳转机制所以我们直接 添加一句   

我们运行的是

代理对象怎么触发计算机了

这个有个触发链 

UserproxyUserimptlnheadUserimptln内的Runtime.getruntime("CALC")

上面这个就是动态代理的触发链

主要的学习目标就是 :了解invoke()导致的链的触发

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com