小工具      在线工具  汉语词典  css  js  c++  java

JAVA JDK 动态代理

Java 额外说明

收录于:42天前

package cn.demo3;

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

import org.junit.Test;

import cn.demo2.SupPerson;

public class Demo 
{
	@Test
	public void test1()
	{
		// 要被增强的对象
		final NormalPerson p=new NormalPerson();
		
		// 需求: 使用动态代理的方式对普通人进行增强
		// jdk提供的类和方法可以给咱们动态的生成代理对象/增强对象 不需要自己去创建增强类
		
		/*参数概述: 固定死的
		 *  参数1: 和要被增强的对象一样的类加载器
		 *  参数2: 和要被增强的对象一样的接口
		 *  					1 根据指定的传递接口 返回一个该接口下的实例
		 *  					2 传递的接口 里面的方法就是可以被增强的所有方法
		 *  
		 *  参数3: 所有的增强业务逻辑实现 (方法)
		 * */
		Person proxyPerson =(Person)Proxy.newProxyInstance(
				p.getClass().getClassLoader(), 
				p.getClass().getInterfaces(),
				new InvocationHandler() {
					
					/*参数概述 固定死的
					 * 参数1:不用管 永远是固定值    代理对象的类型 
					 * 参数2: 要被增强的方法
					 * 参数3: 要被增强的方法运行过程中需要的参数
					 * */
					
					@Override //invoke里面是所有的增强业务逻辑代码
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						
						
						if("eat".equals(method.getName()))
						{
								// 让以前的方法执行
								// 参数1:本身应该执行这个方法的对象
								// 参数2: 执行这个方法需要的参数
							 method.invoke(p, args);
							// 原来方法的返回值
							//System.out.println(value);
							// 写增强业务逻辑
							System.out.println("增强了:变成飞...");
							
							// 最终返回值 谁调用返回给谁
							return "abcd";
						}
						
							
						return method.invoke(p, args);
						
						
						
					}
				});
		
		//SupPerson sup=new SupPerson(p);
		//sup.run();
		proxyPerson.run(); // 执行这个方法  invoke都会执行一遍   执行的内容就是针对该方法的增强
		
		proxyPerson.run1(); // 执行这个方法  invoke都会执行一遍   执行的内容就是针对该方法的增强
		
		String value = proxyPerson.sleep();
		System.out.println(value);
		
		String value2 = proxyPerson.eat("榴莲");
		System.out.println(value2);
		
	}
}

. . .

相关推荐

额外说明

bugku:杂项可爱的故事

下载附件,解压得到两张图片和题目提示的文档文件, 题目提示和故事内容是这样的:     题目的提示说flag就藏在图片特殊文字中,还提到谷歌翻译,开始以为要把文字翻译成我们认识的,结果半天提取不出来文字,看了其他暗示,才知道这是种游戏中的文字,提瓦特文字

额外说明

java中字符串的格式以及日期的加减运算

String str ="2009-1-1" java.text.SimpleDateFormat sdf  = new java.text.SimpleDateFormat("yyyy-MM-dd"); java.util.Date date =sdf

额外说明

大语言模型的预训练[5]:语境学习、上下文学习In-Context Learning:精调LLM、Prompt设计和打分函数(Scoring Function)设计以及ICL底层机制等原理详解

大语言模型的预训练[5]:语境学习、上下文学习In-Context Learning:精调LLM、Prompt设计和打分函数(Scoring Function)设计以及ICL底层机制等原理详解 1.In-Context Learning背景与定义 背景

额外说明

怎么截取java的字符串,JavaScript substring() 方法,substring这么使用(详细介绍)

JavaScript substring() 方法 定义和用法 substring() 方法用于提取字符串中介于两个指定下标之间的字符。 语法 stringObject.substring(start,stop) 参数 描述 start 必需。一个非负的

额外说明

Spring Boot 3.0:构建下一代Java应用的新方法

文章目录 Spring Boot 3.0:一览 1. **模块化应用程序** 2. **更强大的自动化工具** 3. **更强大的安全性** 4. **更好的性能和扩展性** 如何开始使用Spring Boot 3.0 1. 安装Spring Boot

额外说明

信号处理(二)音频信号的分帧, 加窗

1 .语音信号的三个参数 语音信号有三个重要的参数:声道数、取样频率和量化位数。 声道数:单声道或者双声道 采样频率:一秒钟对声音采样的次数,例如10000HZ代表一秒钟将信号分解为10000份,当采样数量非常高的时候,我们人眼看起来就是连续的。(实际是

额外说明

编程工具(一)--------Postman无法打开“could not open postman”

2020.1.17 春节假期前夕,新功能即将上线,然而某日打开postman准备测试时报错“could not open postman”,对于这种问题,我的第一反应就是重装软件,然而重装根本无法完成,依然报错“could not open postma

额外说明

计算机网络知识总结:ip地址、分类及什么样的ip主机地址可以分配给主机使用

我们知道在互联网上,如果想要被其他终端访问,就需要给每台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的标识符,这就是我们所说的唯一的IP地址。IP协议就是使用这个地址在主机之间传递信息,这是Internet能够运行的基础。 注意:由于现在我们

额外说明

解决WIN系统缺少ndfapi.dll文件导致程序无法启动问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个ndfapi.dll文件(挑

额外说明

joomla网站开发_如何轻松地将您的网站从Joomla迁移到WordPress(逐步操作)

joomla网站开发 您想将您的网站从 Joomla 迁移到 WordPress 吗?虽然 Joomla 是一个很好的内容管理系统,但它不如 WordPress 强大、灵活和用户友好。通常,用户可能会从 Joomla 开始,但最终会转向 WordPres

ads via 小工具