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

动态代理-实例

    博客分类:
  • jase
阅读更多
package com.DynamicProxy;
//抽象角色
public interface BuyTicket {

	public Ticket gettrick(String dest);
	
}


package com.DynamicProxy;

//具体角色
public class NormalBuyTicket implements BuyTicket{
	NormalBuyTicket(){
		System.out.println("fuck");
	}

	public Ticket gettrick(String dest) {
		System.out.println("哪儿的票:");
		System.out.println("售票处买到");
		return new Ticket();
		
	}
	

}

# //method.invoke(obj)等同于NormalBuyTicket.gettrick(); 
#         //method.invoke(obj,args)等同于NormalBuyTicket.gettrick(参数); 
#         //Object ret = method.invoke(obj,args)等同于NormalBuyTicket.gettrick(参数),有返回值

package com.DynamicProxy;

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

//代理角色。动态代理的代理角色要实现代理类的接口,而不是抽象角色.
//客户端用proxy类(动态代理类)来和代理角色沟通,类似于静态代理的代理类
public class proxybuy implements InvocationHandler{
private Object obj;
String name;
	public proxybuy(){}
	public proxybuy(Object obj,String name){
		this.obj=obj;
		this.name=name;
	}
	
	


	//代理行为
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println("代理前"+method);
		System.out.println("黄牛党办理");
		Object ret = method.invoke(obj,args);//放入被代理对象,抽象代理的方法,方法参数
		
		[color=red][size=x-large]//method.invoke(obj)等同于NormalBuyTicket.gettrick();
		//method.invoke(obj,args)等同于NormalBuyTicket.gettrick(参数);
		//Object ret = method.invoke(obj,args)等同于NormalBuyTicket.gettrick(参数),有返回值[/size][/color]
		System.out.println("代理后"+method);
		return ret;
	}

}





package com.DynamicProxy;

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

import com.DynamicProxy.BuyTicket;
import com.DynamicProxy.proxybuy;
//测试类
public class testpy {
	public static void main(String[] args){
		BuyTicket buyy=new NormalBuyTicket();//呼叫被代理类
		InvocationHandler ds = new proxybuy(buyy,"杭州");//初始化代理类
	    
		BuyTicket pys=(BuyTicket) Proxy.newProxyInstance(buyy.getClass().getClassLoader(), buyy.getClass().getInterfaces(), ds);
		Ticket ticket = pys.gettrick("hangzhou");
		System.out.println("ticket is : " + ticket);
		
		
		System.out.println("hello你好".getBytes().length);
	}
//	String a=new String("anc");
	
}
//------------------------------------------
package com.DynamicProxy;

public class Ticket {

}

分享到:
评论

相关推荐

    java 动态代理 简单实例

    Java动态代理是Java语言提供的一种在运行时创建代理对象的技术,它允许我们为已存在的接口创建代理类,以便在调用方法时添加额外的功能或控制。动态代理在很多场景下非常有用,比如日志记录、性能监控、事务管理等。...

    3个动态代理实例

    下面我们将深入探讨三个动态代理的实例,这些实例将帮助我们更好地理解这个概念。 首先,我们来看第一个实例——`TestDynamicProxy`。在这个例子中,我们可能会看到如何使用Java的`java.lang.reflect.Proxy`类来...

    java动态代理实例

    在这个实例中,我们将深入探讨Java动态代理的核心概念,以及如何利用它来实现拦截器模式。 首先,我们需要了解Java动态代理的基本原理。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang....

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

    3. **生成代理对象**:使用`Proxy.newProxyInstance()`方法,传入类加载器、目标对象实现的接口列表以及之前创建的`InvocationHandler`实例,生成代理对象。 4. **调用代理对象的方法**:通过代理对象调用方法时,...

    动态代理例子

    3. **创建动态代理实例**: - 首先,你需要有一个接口,这个接口定义了代理对象需要实现的所有方法。 - 然后,创建一个实现InvocationHandler接口的类,重写invoke()方法。 - 最后,使用Proxy.newProxyInstance()...

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

    动态代理在Java编程中是一种非常重要的技术,它允许我们在运行时创建对象的代理,从而可以在不修改原有代码的情况下,为对象添加额外的功能。本压缩包包含关于三种主要的动态代理实现方式:JDK动态代理、CGLIB以及...

    动态代理原理实例Demo

    Java动态代理是Java编程中一个非常重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代替原对象执行某些额外的操作,而无需修改原对象的代码。动态代理在AOP(面向切面编程)中广泛应用,如日志记录、...

    Java中动态代理的介绍及实例

    3. **创建动态代理实例**:通过动态代理类的构造函数或`newProxyInstance()`方法,传入`InvocationHandler`实例,创建动态代理实例。 #### 四、动态代理实例演示 示例代码展示了如何使用JDK动态代理创建一个代理...

    一个简单的java动态代理的实例

    在这个简单的Java动态代理实例中,我们将探讨如何利用这两个核心组件来实现代理功能。 首先,我们需要理解代理模式的基本概念。代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在Java中...

    JDK动态代理和Cglib动态代理实例源码

    本篇将详细探讨JDK动态代理和Cglib动态代理,并通过源码实例来加深理解。 首先,JDK动态代理是Java内置的一种机制,它依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。`Proxy`类...

    Java反射和动态代理实例

    几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...

    AOP入门------------------实例

    **AOP(面向切面编程)入门实例** AOP,全称为Aspect-Oriented Programming,是一种编程范式,旨在减少代码中的重复性,提高代码的模块化和可维护性。在Java开发中,AOP主要应用于日志记录、事务管理、性能监控等横...

    java动态代理实例aop

    `Proxy`类用于创建一个实现了指定接口的动态代理类的实例,而`InvocationHandler`接口则定义了对代理对象方法调用的处理方式。 首先,我们来理解一下`InvocationHandler`。这个接口有一个核心方法`invoke()`: ```...

    JAVA设计模式之代理模式实例

    在本实例中,我们将深入探讨Java中的代理模式及其应用。 代理模式的核心思想是为一个对象创建一个代理对象,这个代理对象在客户端和目标对象之间起到中介的作用。它可以控制目标对象的访问,也可以在调用目标对象的...

    动态代理和cglib例子

    动态代理和CGLIB在Java开发中扮演着重要的角色,特别是在实现面向切面编程(AOP)和增强对象功能方面。动态代理允许我们在不修改原始代码的情况下,为已有对象添加额外的功能,比如日志记录、性能监控等。而CGLIB...

    JDK动态代理简单示例

    JDK动态代理是Java编程中一个非常重要的特性,它允许我们在运行时创建具有特定接口的代理类实例。这种技术在很多场景下都非常有用,比如在AOP(面向切面编程)中实现方法拦截、日志记录、事务管理等。下面我们将深入...

    spring-实例工厂注入

    - 需要对创建的对象进行一些特殊的处理,比如AOP代理等。 总结,Spring的实例工厂注入提供了一种灵活的方式来控制对象的创建,尤其是在对象初始化过程复杂或者需要特定处理的情况下。通过自定义工厂类,我们可以将...

    JAVA动态代理实例

    在Java编程语言中,动态代理是一种强大的特性,它允许我们在运行时创建代理对象来扩展或增强其他对象的功能。这个特性通常用于实现AOP(面向切面编程)或者为已有接口提供额外的服务,如日志、事务管理等。下面我们...

    JDK动态代理_JDK动态代理

    3. **创建动态代理对象**:使用`Proxy.newProxyInstance`方法创建动态代理对象,传入ClassLoader、接口数组和上一步骤创建的InvocationHandler实例。 4. **调用代理对象的方法**:当调用代理对象的方法时,会自动...

    优秀的设计模式示例-动态代理模式

    然后,我们创建一个实现了该接口的InvocationHandler(调用处理器)实例,该处理器负责处理代理对象的所有方法调用。 - 通过Proxy.newProxyInstance()方法,我们可以传入类加载器、接口数组以及InvocationHandler,...

Global site tag (gtag.js) - Google Analytics