`
哈达f
  • 浏览: 119039 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

JDK动态代理模式

    博客分类:
  • j2se
 
阅读更多
package cn.dhcool.dynamic.proxy;

public interface CommonInterface {
	
	public void speak();

}

 

package cn.dhcool.dynamic.proxy;

public class RealObject implements CommonInterface{

	@Override
	public void speak() {
		System.out.println("你好");		
	}

}

 

 

package cn.dhcool.dynamic.proxy;

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

public class MyInvocationHandler implements InvocationHandler{
	
	private CommonInterface realObject;
	
	public MyInvocationHandler(){}
	
	public MyInvocationHandler(CommonInterface realObject){
		this.realObject = realObject;
	}
	
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Method[] methods = realObject.getClass().getMethods();
		for (int i = 0; i < methods.length; i++) {
			if(methods[i].getName().equals(method.getName())){
				this.checkInfo();
				methods[i].invoke(this.realObject, args);
				break;
			}
		}
		return null;
	}
	
	//代理模式调用的方法
	public void checkInfo(){
		System.out.println("运行方法前先调用的检查方法!");
	}
}

 

 

package cn.dhcool.dynamic.proxy;

import java.lang.reflect.Proxy;

public class Client {
	
	public static void main(String[] args) {
		
		CommonInterface realObject = new RealObject();
		/*
		 * 代理模式需要的条件,一个公共的接口,一个真实实现的类,一个代理类同样实现了公共接口
		 * 现在我们有了接口和实现类,我们还需要一个代理类,我们的代理类可以通过JDK的Proxy类动态为我们创建
		 * 通过反射方式去调用
		 * InvocationHandler 一个接口处理类,接口回调方法,类似与SpringTemple 模版操作JDBC的接口回调
		 * 还有DBUtil的ResultSetHandler接口,都是一种接口回调的思想。
		 * */
		//采用JDK动态代理类动态创建代理类
		CommonInterface proxyObject = (CommonInterface)Proxy.newProxyInstance(realObject.getClass().getClassLoader(), 
							realObject.getClass().getInterfaces(), new MyInvocationHandler(realObject));
		proxyObject.speak();
	}

}

 

分享到:
评论

相关推荐

    jdk动态代理模式的分析与底层实现

    基于java的jdk动态代理, 比较了静态代理与动态代理的区别,以及动态代理的底层实现,反编译class文件 jdk动态代理和cglib的区别

    JDK动态代理_JDK动态代理

    在软件工程中,代理模式是一种常见的设计模式,它通过为一个对象提供一个替代品或占位符来控制对这个对象的访问。这种模式通常用于添加额外的功能(例如日志记录、事务管理等)而无需修改原始对象的实现。本文将详细...

    代理模式,JDK动态代理,SpringAOP来龙去脉

    在Java中,我们可以使用JDK的动态代理或者Spring AOP来实现代理模式。 JDK动态代理主要依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。Proxy类是生成代理对象的工厂,而...

    jdk动态代理技术详解

    Proxy 类是 JDK 中的动态代理类,是动态代理的核心类,其作用类似于代理模式中的代理。Proxy 类中包含的全是静态的方法和成员变量,这是一个纯粹的工具类,因此其源代码中含有一个私有的构造器,在某种意义上可以看...

    JDK动态代理简单示例

    除了基本的代理实现,JDK动态代理还可以结合其他设计模式,如工厂模式,创建更加复杂的代理对象。此外,Spring框架中的AOP功能也是基于JDK动态代理或CGLIB实现的,它允许开发者定义切面,对满足特定条件的方法进行...

    AOP之JDK动态代理和CGLib动态代理

    Spring框架是AOP实现的一个典范,它提供了两种主要的动态代理方式:JDK动态代理和CGLib动态代理。 **JDK动态代理**: JDK动态代理基于Java的反射API实现,适用于接口代理。当目标对象实现了至少一个接口时,Spring...

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)

    Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...

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

    在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...

    Jdk动态代理和cglib动态代理原理

    Java中的动态代理是一种重要的设计模式,它允许在运行时创建具有特定行为的代理对象,以扩展或增强原有对象的功能。动态代理主要分为两种技术:JDK动态代理和CGLIB动态代理。 ### JDK动态代理 JDK动态代理是Java...

    java jdk 动态代理 演示demo

    代理模式是一种设计模式,它提供一个代理类来控制对原对象的访问。在静态代理中,我们通过编写额外的代理类来实现这一目标,但在动态代理中,代理类是在运行时生成的,无需预先编写代码。 Java JDK提供了`java.lang...

    静态代理、jdk动态代理、cglib动态代理

    JDK 动态代理是 Java 语言中的一种代理模式实现方式,它使用 Java 反射机制来实现代理对象的创建。在 JDK 动态代理中,我们不需要在编译时创建代理类,而是使用 Java 反射机制在运行时动态创建代理对象。 JDK 动态...

    JDK动态代理在EJB3(包括WebService)中的应用

    EJB3是Java EE平台的一部分,提供了一种简化的方式来创建可部署在服务器端的企业级组件,而动态代理则允许在运行时创建代理类,以实现代理模式,通常用于拦截方法调用,进行额外的操作如日志记录、事务管理或权限...

    jdk动态代理 + 拦截器实现小例

    在这个“jdk动态代理 + 拦截器实现小例”中,我们将探讨如何利用Java的InvocationHandler接口和Proxy类来实现拦截器模式,以实现灵活的代码扩展和日志记录、性能监控等需求。 首先,让我们理解什么是动态代理。在...

    java 动态代理实例(JDK代理与CGLIB代理)

    动态代理主要分为两种:JDK代理和CGLIB代理。 **JDK代理**是基于接口的代理,它通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。当我们的目标对象实现了特定的接口时,我们可以...

    Jdk动态代理,cglib动态代理,反射和拦截器(链)示例

    本资源提供的示例涵盖了这些核心概念,通过JDK动态代理、CGLIB动态代理以及拦截器链的实践,帮助开发者深入理解并掌握这些技术。 首先,让我们来探讨JDK动态代理。Java标准库中的`java.lang.reflect.Proxy`类和`...

    Spring-AOP-JDK动态代理

    Spring AOP通过代理模式实现了这一概念,允许开发者在不修改源代码的情况下插入额外的功能。 JDK动态代理是Java提供的一种创建代理对象的方式,它在运行时根据接口生成一个实现了这些接口的代理类。Spring AOP可以...

    动态代理设计模式 日志和源码

    动态代理设计模式是一种在运行时创建代理对象的技术,它允许我们为现有的对象提供额外的功能,如日志记录、性能监控、事务管理等,而无需修改原对象的代码。这种模式在Java和许多其他编程语言中都有应用,尤其在...

    java设计模式【之】JDK动态代理【源码】【场景:帮爸爸买菜】.rar

    * 动态代理(JDK代理、接口代理、拦截器模式) * 动态代理中的静态方法:java.lang.reflect.Proxy.newProxyInstance (ClassLoader(类加载器),interface(接口),handler(监听处理器)) * * 代码示例:《帮爸爸...

    java动态代理(JDK和cglib).pdf

    Java 动态代理是Java语言中的一个重要特性,它允许我们在...这在设计模式中被称为代理模式,对于构建复杂、模块化的系统具有重要作用。了解和熟练使用这两种动态代理技术,可以极大地提升Java开发的效率和代码质量。

Global site tag (gtag.js) - Google Analytics