`
hpgary
  • 浏览: 82904 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

动态代理--接口无实现可以调用

    博客分类:
  • Java
 
阅读更多

模仿Mybatis,只有接口创建代理实现,根据方法名调用调用实现:参考MyBatis源码类:

MapperProxyFactory, MapperProxy 

创建接口类:

public interface MethodInterface {
	String helloWorld();
}

 

动态代理类:

 

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

public class MethodProxy<T> implements InvocationHandler {

	protected Class<T> methodInterface;

	public MethodProxy(Class<T> methodInterface) {
		this.methodInterface = methodInterface;
	}
	
	public static void main(String[] args) {
		MethodInterface newInstance = newInstance(MethodInterface.class);
		System.out.println( newInstance.helloWorld() );
	}
	
	@SuppressWarnings("unchecked")
	public static <T> T newInstance(Class<T> methodInterface) {
		final MethodProxy<T> methodProxy = new MethodProxy<T>(methodInterface);
		return (T) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
				new Class[] { methodInterface }, methodProxy);
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("方法名:" + method.getName()); 
		// 针对不同的方法进行不同的操作
		if (method.getName().equalsIgnoreCase("helloWorld")){
			return "世界你好" ;
		}
		return null; 
	}
	
}

 

0
1
分享到:
评论

相关推荐

    代理模式-静态动态代理-jdk动态代理-cglib动态代理

    JDK动态代理基于接口实现,也就是说,被代理的对象必须实现至少一个接口。Java的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口是实现JDK动态代理的关键。`Proxy`类用于创建代理对象,而...

    动态代理-jdk、cglib、javassist.zip

    当你需要为一个接口动态生成代理实现时,可以使用JDK动态代理。例如,你可能想为一组业务对象添加日志、事务控制等通用功能,而无需修改这些对象的源代码。 JDK动态代理的使用步骤通常包括: 1. 定义一个或多个接口...

    反射-动态代理-注解

    动态代理是Java提供的一种机制,可以在运行时创建一个实现了特定接口的新类,这个新类可以作为原有接口的代理,用于添加额外的功能。主要由`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`实现。...

    海康视频接口调用示例---

    通过调用其接口,开发者能够实现对监控设备的远程控制、视频流获取等功能,从而构建定制化的监控系统。 这个示例可能包含了以下几个关键知识点: 1. **API接口调用**:海康监控设备提供了API接口,允许开发者通过...

    java-jdk动态代理的实现demo

    Java JDK 动态代理是一种强大的特性,它允许我们在运行时创建代理类,这些代理类可以扩展或修饰已存在的接口实现。动态代理在很多场景下非常有用,比如日志记录、性能监控、事务管理等,这些功能可以在不修改原始...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    在Java中,可以使用java.lang.reflect包下的相关类和接口实现动态代理。 例如,通过使用java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口,我们可以在运行时创建一个代理对象。代理对象在调用...

    Spring AOP的静态代理和动态代理,转移到调用处理器一个集中的方法中处理.docx

    - **CGLIB动态代理**:当被代理的类没有实现任何接口时,可以使用CGLIB库生成子类来实现代理。CGLIB会通过字节码技术动态生成一个目标类的子类,并覆盖其方法来实现代理。相比JDK动态代理,CGLIB的性能通常更好,但...

    动态代理与RMI远程调用

    动态代理在Java中主要用于创建一个在运行时动态实现一组接口的对象,它可以作为其他对象的代理,实现在方法调用前后的额外处理。动态代理主要由`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`...

    jdk与cglib动态代理与底层实现

    JDK动态代理基于Java的接口机制实现,因此,要使用JDK动态代理,被代理的目标类必须实现至少一个接口。`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口是JDK动态代理的核心。Proxy类用于...

    Java动态代理两种实现方式

    Java提供了两种主要的动态代理实现方式:JDK自身的动态代理(基于接口)和Cglib库。 ### JDK动态代理 JDK动态代理是通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现的。Proxy类...

    webservice的动态调用和静态调用

    程序员可以直接使用这个代理类的方法进行调用,代码可读性强,编译时就能捕获错误,提高了开发效率。 例如,如果添加了一个名为"MyWebService"的Web引用,那么在代码中就可以像操作本地对象一样调用其方法: ```...

    ice最简单实现 ruby调用ice接口 - Ruby - language - ITeye论坛

    总的来说,Ruby调用ICE接口涉及到ICE的安装、接口定义、代理和stub的生成、服务的实现与注册、客户端调用等多个环节。通过这些步骤,你可以创建出高效、可扩展的分布式系统,充分利用ICE的特性来解决跨语言、跨平台...

    基于Android调用OpenAI接口的ChatGPT实例

    调用openai提供的接口,实现与ChatGPT对话 功能: 支持至Gpt-3.5模型(因为本人买不起plus) ✓ 无需代理即可与ChatGPT对话(可以使用自己的服务器中转) ✓ 支持带记忆的连续对话,可以随时清除记忆 ✓ 可以...

    Android-一个让http接口调用跟调用本地方法一样自然优雅的项目

    在运行时,当调用这些接口方法时,代理类会自动执行以下操作: 1. 构造请求:根据方法的参数构建请求体或URL参数。 2. 发送请求:使用如OkHttp这样的网络库发送HTTP请求。 3. 处理响应:接收服务器返回的数据,通常...

    使用spring远程调用服务端接口实现WebService功能

    2. **服务消费者端配置**:在客户端,你需要创建一个HttpInvokerProxyFactoryBean,它是一个Spring AOP代理,可以调用远程服务。配置如下: ```xml &lt;property name="serviceUrl" value="http://your-server-...

    Mybatis的Mapper方式整合elasticsearch的DSL调用,基于接口和代理生成bean注入的方式进行调用

    CGlib是一个强大的字节码生成库,它可以在运行时生成新的类和接口的实例,这正是我们需要的——为每个Mapper接口创建一个代理类,以便在调用实际方法之前执行DSL查询。 以下是整合步骤: 1. **创建Mapper接口**:...

    java-用Java动态代理实现AOP.pdf

    Java动态代理机制要求被代理的类必须实现至少一个接口,因为Java动态代理是通过JDK的java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现的。Proxy类用于生成代理对象,而InvocationHandler...

    SAP-WEBSERVICE调用案例

    本文将详细介绍如何在SAP系统中实现对Web Service接口的调用,并通过实际案例进行演示。 #### 二、SAP调用Web Service概述 SAP调用Web Service通常涉及以下几个步骤: 1. **创建WebService连接**:首先需要在SAP...

    C#.NET_动态调用webservice的三种方式

    一旦编译成功,我们可以通过反射来调用生成的代理类中的方法: ```csharp if (results.Errors.Count == 0) { Assembly assembly = results.CompiledAssembly; Type proxyType = assembly.GetType(...

Global site tag (gtag.js) - Google Analytics