反射的应用之动态代理

Java反射06:反射的应用之动态代理 反射体现了代理模式的动态性 阅读详情

代码源自 尚硅谷 java基础 day19_10反射的应用之动态代理

package com.william.java.reflection.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//动态代理接口的使用, 体会反射是动态语言的关键
interface Subject {
	void action();
}

// 被代理类
class RealSubject implements Subject {
	@Override
	public void action() {
		System.out.println("我是被代理类,记得要执行我哦^=^");
	}
}

//
class MyInvocationHandler implements InvocationHandler {
	Object obj;// 实现了接口的被代理类的对象的声明

	// 1.给被代理的对象实例化
	// 2.返回一个代理类的对象
	public Object blind(Object obj) {
		this.obj = obj;
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
	}

	// 当通过代理类的对象发起对被重写的方法的调用时,都会转换为对如下的 invoke 方法的调用
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Object returnVal = method.invoke(obj, args);
		return returnVal;
	}

}

public class TestProxy {
	public static void main(String[] args) {
		// 1.被代理类的对象
		RealSubject realSubject = new RealSubject();
		// 2.创建一个实现了 InvocationHandler 接口的类的对象
		MyInvocationHandler handler = new MyInvocationHandler();
		// 3.调用 blind() 方法,动态的返回一个同样实现了 real 所在类实现的接口 Subject 的代理类的对象
		Object object = handler.blind(realSubject);
		Subject subject = (Subject) object;// 此时 sub 就是代理类的对象

		subject.action();// 转到对 InvacationHandler 接口的实现类的 invoke() 方法的调用

	}
}
通过以下代码加深 动态代理的理解
package com.william.java.reflection.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface Person {
	void say();

	void eat();
}

interface Animal {
	void roar();

	void eat();
}

class TangWei implements Person {
	@Override
	public void say() {
		System.out.println("I'm TangWei, Hello");
	}

	@Override
	public void eat() {
		System.out.println("TangWei eat ice cream");
	}
}

class Angela implements Person {
	@Override
	public void say() {
		System.out.println("I'm Angela, Hello");
	}

	@Override
	public void eat() {
		System.out.println("Angela eat ice cream");
	}
}

class Cat implements Animal {
	@Override
	public void roar() {
		System.out.println("I'm a Cat, miao~");
	}

	@Override
	public void eat() {
		System.out.println("Cat eat mouse");
	}
}

class Dog implements Animal {
	@Override
	public void roar() {
		System.out.println("I'm a Dog, wang~");
	}

	@Override
	public void eat() {
		System.out.println("Dog eat bone");
	}
}

class MyInvHandler implements InvocationHandler {
	Object object;

	public Object blind(Object object) {
		this.object = object;
		return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {		
		return method.invoke(object, args);
	}

}

public class test {
	public static void main(String[] args) {
		TangWei tangWei = new TangWei();
		Angela angela = new Angela();
		Cat cat = new Cat();
		Dog dog = new Dog();

		MyInvHandler handler = new MyInvHandler();

		Person person = (Person) handler.blind(tangWei);
		person.say();
		person.eat();

		person = (Person) handler.blind(angela);
		person.say();
		person.eat();

		Animal animal = (Animal) handler.blind(cat);
		animal.eat();
		animal.roar();

		animal = (Animal) handler.blind(dog);
		animal.eat();
		animal.roar();

	}

}

Java反射机制与动态代理深入剖析与应用 Java反射机制是Java语言在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。这一机制增加了程序的灵活性,但也增加了程序的复杂性和安全风险。代理模式是一种结构型设计模式,它允许通过一个代理对象来控制对另一个对象的访问。代理模式的关键在于,它为对象提供了额外的、间接的访问层,从而在不改变原始对象的条件下,为对象操作提供额外的行为或操作。 阅读详情

相关推荐

MatLab Desired port was :31515解决方案

前言:使用的MatLabR2022b今天突然出现了错误,在程序中打不开文件。后尝试了下面的方法,可以解决。后面还有另一种方法,上面方法如果行不通,大家可以尝试一下。搜索栏输入:firewall.cpl。找到相关项,右键属性,设置为允许。

qq_42212501的博客 1339

反射的应用:动态代理

1、代理设计模式的原理 使用一个代理将对象包装起来,然后用该代理替代原始对象,任何对对象的调用都要通过代理,代理对象决定是否以及何时将方法调用转到原始对象上。 2、静态代理示例 /** * @auther hu * @create 2019/8/18 * <p> * 静态代理示例 * 代理类和被代理类在编译期间,就确定下来了 */ interface ClotheFacto...

明天请叫我早点起床的博客 261

数据分析—用户行为数据分析

一般价值用户(R高F高M低):用户处于购买活跃期,感兴趣的商品多,购买次数少 → 针对该部分客户,目的就是要让他们购买,所以可以和运营部门沟通,降低利润,给出有力折扣促进购买,进而转为重要价值用户。重要价值用户(R高F高M高)维护:用户处于购买活跃期,感兴趣的商品多,购买次数也多 → 针对兴趣产品,保持一定频率的触达,持续维护。

m0_74091312的博客 1419

java中的动态代理和反射 反向代理

java的动态代理是用反射实现的。 InvocationHandler 动态代理 反射 Proxy java.lang.reflect

fxnfk 1万+

02-Redis 核心特性与数据结构详解:揭秘高性能的技术内核

本文深度拆解 Redis 高性能的技术内核:揭秘其凭“内存存储 + C 语言开发” 实现微秒级延迟、10 万 + QPS 的性能优势;详解 5 种基础数据类型(String/Hash 等)与 4 种扩展数据类型(Stream/Geospatial 等)的特性及场景;还介绍多语言支持、RDB/AOF 持久化、主从复制 / 哨兵 / 集群等高可用方案,助读者掌握 Redis 技术核心与实践逻辑。

蜗牛老师,专注编程领域 996

多模态大模型:技术原理与实战 全球多模态大模型介绍

关键词:多模态大模型、深度学习、计算机视觉、自然语言处理、跨模态学习、迁移学习、人工智能随着人工智能技术的飞速发展,多模态大模型已经成为了当前AI领域最热门的研究方向之一。多模态大模型能够同时处理和理解多种类型的数据,如文本、图像、音频和视频等,这为AI系统在复杂场景下的应用提供了更加强大和灵活的能力。本文将深入探讨多模态大模型的技术原理,介绍其实战应用,并对全球主要的多模态大模型进行全面的介绍和比较。

AI天才研究院 4267

反射机制的应用之动态代理

代理设计模式的原理: 使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。最好可以通过一个代理类完成全部的代理功能。 静态代理: //静态代理:代理类和被代理类在编译时就已确定 interface ClothFactory{ void produceCloth(); } //代理类 clas...

weixin_44022886的博客 190

【IoT】压力式电子脉搏器设计

智能硬件

产品线负责人 1619

反射_应用:Java动态代理

动态代理特别重要,Java的框架都爱这玩意儿!!!Java动态代理动态代理是指客户通过代理类来调用其它对象的方法,并且是在程序运行时根据需要动态创建目标类的代理对象。动态代理使用场合:1)调式2)远程方法调用代理设计模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。动态代理之前先说一个静态代理的...

一颗洛米 239

小孙学变频学习笔记(二)变频器的逆变电路

本文主要介绍了变频器中逆变电路的核心器件IGBT及其应用。IGBT是一种电压控制型三端半导体开关器件,具有开关频率高、功耗低的优点,在变频器中仅使用截止和饱和导通状态。文章详细分析了IGBT的结构特性、与晶闸管的区别,以及由四个IGBT组成的直流转交流逆变电路原理。重点阐述了IGBT并联反向二极管的作用:提供电流反向通路、避免反向电压损坏器件、提高开关效率等。最后提供了相关学习参考网址供读者进一步研究。

qq_43091070的博客 1196

NVIDIA Omniverse 技术浅析(二):USD

例如,一个用户可以负责场景的几何体设计,另一个用户可以负责材质和灯光的调整。USD 的开放性和可扩展性,结合 Omniverse 的 Kit 扩展框架,使得用户和开发者可以创建自定义的应用程序和工具,以满足特定的需求。USD 的材质和物理属性系统,结合 Omniverse 的 RTX 实时渲染技术,使得用户可以在虚拟环境中看到逼真的光影效果和物理模拟。USD 的时间轴和动画功能,结合 Omniverse 的物理属性系统,使得用户可以为虚拟环境中的元素创建复杂的动画和物理模拟。

m0_75253143的博客 445

Java 反射与动态代理:实践中的应用与陷阱

在现代Java应用中,反射和动态代理提供了强大的灵活性,但它们也带来了性能和复杂度上的挑战。本文将深入探讨这些技术在实际项目中的应用,分析它们可能导致的陷阱,并提供详细的优化策略,尤其在大型系统或基于Spring的项目中,如何避免性能瓶颈和滥用。

qq_36534560的博客 3373

利用Python实现Springer文献关键词爬虫

🔧 如何分析Springer的搜索结果HTML结构🕷️ 编写高性能异步爬虫抓取论文元数据📊 使用Pandas导出Excel🧠 如何处理作者、摘要、DOI等字段🔄 如何优化爬虫稳定性与可扩展性。

2201_76125261的博客 415

【附章6 反射的应用】反射的应用:动态代理

【附章6 反射的应用:动态代理、概述,其相关API、动态代理原理、步骤、AOP的讲解】

小鳴人的博客 1480

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java反射机制与动态代理解析与应用

在调用方法时,实际对象的相应方法会被代理处理器的invoke()方法拦截,并在方法前后添加一些额外的操作。通过代理对象,我们可以在调用实际对象的方法前后进行一些额外的操作。通过反射机制,我们可以获取类的构造方法、字段、方法等信息,并可以在运行时动态创建对象、调用方法以及访问和修改字段的值。Java中的每个类都有一个Class对象,它包含了该类的完整信息,可以通过该对象来获取类的构造方法、字段、方法等信息。通过反射机制,我们可以获取类的所有字段和方法,并根据一定的规则来控制对字段和方法的访问权限。

小筱在线博客 841

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Java 反射应用 之 动态代理】

静态代理是可以解决增强的问题,也可以实现代理类帮助被代理类做一些额外的事情。但是这里有一个问题,不知道你发现没有,如果采用静态代理的话,每个静态类都要自己写,这样是不是非常繁琐。有没有更好的方式,有---->那就是动态代理。

Snow的博客 1233

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

彻底理解Java反射以及动态代理中对反射的应用

反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。 简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。 反射有什么用,其实最主要的用处就两个: 根据类名在运行时创建实例(类名可以

leeta的博客 301

【Java反射】反射的应用:动态代理

文章目录1 代理设计模式的原理2 复习:静态代理3 实现:动态代理参考资料 1 代理设计模式的原理 使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 之前的代理机制,属于静态代理,特征是代理类和目标对象的类都是在编译期间确定下来,不利于程序的扩展。同时,每一个代理类只能为一个接口服务,这样一来程序开发中必然产生过多的代理。最好可以通过一个代理类完成全部的代理功能。 代理类和被代理类都需要实现同一个接口。

Awt_FuDongLai的博客 240

反射的应用——动态代理

weixin_34211761的博客 90

java反射应用之动态代理

之前看了java反射 看得很慢 就是感觉看不走那种  后面通过慢慢观看视频 手写代码 对java反射有了一定的了解 java反射之动态代理 首先理解一下静态代理 什么是静态代理 就是运用接口然后新建一个代理类通过代理类实例化被代理类对象来调用被代理类方法 其次静态代理的缺点 代理类和被代理类在编译期间已经确定不易于程序的扩展 下面一个made nike factory 来帮助理解什么是静态代

星空中的一颗星 363

php反射应用场景_PHP 反射之动态代理

反射可以探知类的内部结构 可以用它做hook实现插件功能,或者做动态代理与反射相关类和对象相关的函数get_object_varsget_class_methodsget_class_varsget_classget_parent_classmethod_existsproperty_existstrait_exists反射相关的 API 类reflectiontypereflectionpro...

weixin_39624097的博客 177

07_反射的应用:动态代理

动态代理静态代理:动态代理:动态代理步骤:动态代理与AOP (Aspect Orient Programming) 代理理 设计模式的原理:   使用一个代理将对象包装起来, 然后用该代理对象取代原始象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 动态代理相比于静态代理的优点:   抽象角色中(接口)声明的所有方法都被转移到调用处理器一个集中的方法中处理,这样,我们可以更加灵活和统一的处理众多的方法。(看完下面就能理解) 静态代理:   创建一个接口,然后创建被

qq1075666462的博客 137

探索反射API与AOP在动态代理中的应用

反射(Reflection)和面向切面编程(Aspect-Oriented Programming, AOP)是Java中两个强大的特性,它们经常被用于动态代理的实现。动态代理允许我们在运行时动态地创建实现了一组接口的类的实例,并可以在这些实例的方法调用前后插入额外的代码,即切面(Aspect)。包提供了反射API,而AOP则通常通过诸如AspectJ、Spring AOP等框架来实现。不过,Java自身也提供了一种基于接口的动态代理机制,即。

api77的博客 1028
上一篇: Java进阶之reflection(反射机制)——反射概念与基础
下一篇: 设计模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值