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语言提供的一种在运行时创建代理对象的技术,它允许我们为已存在的接口创建代理类,以便在调用方法时添加额外的功能或控制。动态代理在很多场景下非常有用,比如日志记录、性能监控、事务管理等。...
下面我们将深入探讨三个动态代理的实例,这些实例将帮助我们更好地理解这个概念。 首先,我们来看第一个实例——`TestDynamicProxy`。在这个例子中,我们可能会看到如何使用Java的`java.lang.reflect.Proxy`类来...
在这个实例中,我们将深入探讨Java动态代理的核心概念,以及如何利用它来实现拦截器模式。 首先,我们需要了解Java动态代理的基本原理。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang....
3. **生成代理对象**:使用`Proxy.newProxyInstance()`方法,传入类加载器、目标对象实现的接口列表以及之前创建的`InvocationHandler`实例,生成代理对象。 4. **调用代理对象的方法**:通过代理对象调用方法时,...
3. **创建动态代理实例**: - 首先,你需要有一个接口,这个接口定义了代理对象需要实现的所有方法。 - 然后,创建一个实现InvocationHandler接口的类,重写invoke()方法。 - 最后,使用Proxy.newProxyInstance()...
动态代理在Java编程中是一种非常重要的技术,它允许我们在运行时创建对象的代理,从而可以在不修改原有代码的情况下,为对象添加额外的功能。本压缩包包含关于三种主要的动态代理实现方式:JDK动态代理、CGLIB以及...
Java动态代理是Java编程中一个非常重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代替原对象执行某些额外的操作,而无需修改原对象的代码。动态代理在AOP(面向切面编程)中广泛应用,如日志记录、...
3. **创建动态代理实例**:通过动态代理类的构造函数或`newProxyInstance()`方法,传入`InvocationHandler`实例,创建动态代理实例。 #### 四、动态代理实例演示 示例代码展示了如何使用JDK动态代理创建一个代理...
在这个简单的Java动态代理实例中,我们将探讨如何利用这两个核心组件来实现代理功能。 首先,我们需要理解代理模式的基本概念。代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在Java中...
本篇将详细探讨JDK动态代理和Cglib动态代理,并通过源码实例来加深理解。 首先,JDK动态代理是Java内置的一种机制,它依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。`Proxy`类...
几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...
**AOP(面向切面编程)入门实例** AOP,全称为Aspect-Oriented Programming,是一种编程范式,旨在减少代码中的重复性,提高代码的模块化和可维护性。在Java开发中,AOP主要应用于日志记录、事务管理、性能监控等横...
`Proxy`类用于创建一个实现了指定接口的动态代理类的实例,而`InvocationHandler`接口则定义了对代理对象方法调用的处理方式。 首先,我们来理解一下`InvocationHandler`。这个接口有一个核心方法`invoke()`: ```...
在本实例中,我们将深入探讨Java中的代理模式及其应用。 代理模式的核心思想是为一个对象创建一个代理对象,这个代理对象在客户端和目标对象之间起到中介的作用。它可以控制目标对象的访问,也可以在调用目标对象的...
动态代理和CGLIB在Java开发中扮演着重要的角色,特别是在实现面向切面编程(AOP)和增强对象功能方面。动态代理允许我们在不修改原始代码的情况下,为已有对象添加额外的功能,比如日志记录、性能监控等。而CGLIB...
JDK动态代理是Java编程中一个非常重要的特性,它允许我们在运行时创建具有特定接口的代理类实例。这种技术在很多场景下都非常有用,比如在AOP(面向切面编程)中实现方法拦截、日志记录、事务管理等。下面我们将深入...
- 需要对创建的对象进行一些特殊的处理,比如AOP代理等。 总结,Spring的实例工厂注入提供了一种灵活的方式来控制对象的创建,尤其是在对象初始化过程复杂或者需要特定处理的情况下。通过自定义工厂类,我们可以将...
在Java编程语言中,动态代理是一种强大的特性,它允许我们在运行时创建代理对象来扩展或增强其他对象的功能。这个特性通常用于实现AOP(面向切面编程)或者为已有接口提供额外的服务,如日志、事务管理等。下面我们...
3. **创建动态代理对象**:使用`Proxy.newProxyInstance`方法创建动态代理对象,传入ClassLoader、接口数组和上一步骤创建的InvocationHandler实例。 4. **调用代理对象的方法**:当调用代理对象的方法时,会自动...
然后,我们创建一个实现了该接口的InvocationHandler(调用处理器)实例,该处理器负责处理代理对象的所有方法调用。 - 通过Proxy.newProxyInstance()方法,我们可以传入类加载器、接口数组以及InvocationHandler,...