海德体育Java动态代理(设计模式)代码详解
栏目:行业动态 发布时间:2023-11-07
 海德体育Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。通过阅读本文,读者将会对Java动态代理机制有更加深入的理解。本文首先从Java动态代理的运行机制和特点出发,对

  海德体育Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架。通过阅读本文,读者将会对Java动态代理机制有更加深入的理解。本文首先从Java动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现。

  代理模式:为其他对象提供一个代理,来控制对这个对象的访问。代理对象起到中介作用,可以去掉服务或者增加额外的服务,或者引用别人的话:“代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。”

  虚拟代理:根据需要将资源消耗很大的对象进行延迟海德体育,真正需要的时候进行创建。比如网页中的先显示文字再显示图片。

  保护代理:控制不同用户的访问权限。比如:只有当客户注册成功之后,才可以进行增删改查等操作。

  此时可以试着将其集成在同一个代理类中-----动态代理:实现对不同类/不同方法的代理;

  Java动态代理类位于g.reflect包下,一般主要涉及到一下两个类:

  返回甙类类的一个实例,返回后的代理类可以当做被代理类使用(可以使用被代理类在接口中声明过的方法);

  首先得到系统编译器,通过编译器得到文件管理者,然后获取文件,然后编译器执行编译任务,完成编译之后,将class文件加载到类加载器中,通过构造方法得到实例,然后调用newInstance()接收一个对象的实例。

  上说所说,内部的业务逻辑是硬编码的,如何实现真正的动态代理,动态的指定业务逻辑呢?

  1、需要创建一个事务处理器,首先创建一个接口也就是InvocationHandler,为了模拟JDK,这里把接口的名字和JDK事务处理器名称一样,同样写一个方法叫做invoke(),用来表示对某个对象的某个方法进行业务处理,所以需要把某个对象以及对象的方法作为invoke()方法的参数传递进来,invoke(Objectobj,Methodmethod),方法作为参数使用到了java反射,需要把此包引入。这样InvocationHandler接口就完成了海德体育。

  2、创建事务处理实现类比如说时间代理TimerProxy,实现了InvocationHandler接口,这样结构就成了

  需要将目标对象传入,没有参数可以不写参数,创建代理对象的构造方法,初始化目标对象

  3、在Proxy类的newProxyInstance()方法中,除了要把目标Class接口作为参数外,还需要把事务处理器InvocationHandler传进去,然后更改创建实例对象中硬编码的部分用事务处理器方法替代即可。难点在于字符串的拼接。

  在我们项目中代理模式有自己的实际意义,比如说我们想要调用某个jar包下的某个类,可以在调用这个类之前之后添加一些特殊的业务逻辑,这种方式也叫作AOP面向切面编程。(在不改变原有功能的基础上,添加额外的功能。)

  以上就是本文关于Java动态代理(设计模式)代码详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题海德体育,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

  今天需要写一个导出的Excel的功能,但是发现当数据量到3万条时海德体育,列数在23列时,内存溢出,CPU使用100%,测试环境直接炸掉海德体育。小编给大家分享基于java使用POI导出大数据量Excel的方法,感兴趣的朋友一起看看吧

  springboot2+es7使用RestHighLevelClient的示