`

一个动态代理的实例

 
阅读更多

1、先编写一个接口

     

package com.test.dynamicproxy;

public interface MyInterface {
  public void fun();
}

2、用两个类来实现上面的接口

      

package com.test.dynamicproxy;
public class Wang implements MyInterface{

	@Override
	public void fun() {
		  System.out.println("wang的实现");
		
	}
}

 

 

package com.test.dynamicproxy;

public class Zhao implements MyInterface {

	@Override
	public void fun() {
			  System.out.println("zhao的实现");		
	}

}

 

3、编写服务器程序,这个类实现nvocationHandler接口

    

package com.test.dynamicproxy;

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

public class Handler implements InvocationHandler{
   private Object sub;
   

public void setSub(Object sub) {
	this.sub = sub;
}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		System.out.println("执行前");
	    method.invoke(sub,args);
		System.out.println("执行后");
		return null;
	}

}

4、编写代理类。

   

package com.test.dynamicproxy;
import java.lang.reflect.Proxy;
public class MyProxy {
	private Object obj;
	private Handler handler;
	
	
public void setObj(Object obj) {
			this.obj = obj;
		}

   public Object getproxy()
   {   
	   
       this.handler.setSub(obj);
	   return Proxy.newProxyInstance(Wang.class.getClassLoader(), Wang.class.getInterfaces(), handler);	 
   }


public void setHandler(Handler handler) {
	this.handler = handler;
}
}

   5、编写测试程序:

       

package com.test.dynamicproxy;

public class Client {
	public static void main(String[] args)
	{
	 Zhao zhao=new Zhao();
     Wang wang=new Wang();
     Handler handler=new Handler();
     MyProxy proxy=new MyProxy();
     
     proxy.setObj(wang);
     proxy.setHandler(handler);
     MyInterface face=(MyInterface)proxy.getproxy();
     face.fun();
     
     proxy.setObj(zhao);
     proxy.setHandler(handler);
     face=(MyInterface)proxy.getproxy();
     face.fun();
	}	
}

 

   至此一个简单的实例开发完毕了

分享到:
评论

相关推荐

    3个动态代理实例

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

    java动态代理实例

    它需要三个参数:代理对象所实现的接口列表、一个`ClassLoader`(用于加载代理类)和一个`InvocationHandler`实例。这个方法会返回一个新的代理对象,该对象在运行时会动态生成一个实现了指定接口的类,这个类会将...

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

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建对象的代理,从而可以在不修改原有代码的情况下,对原有对象的行为进行扩展或增强。动态代理主要分为两种:JDK代理和CGLIB代理。 **JDK代理**是...

    动态代理例子

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

    静态代理和动态代理简单实现代码

    使用 `Proxy.newProxyInstance()` 可以生成一个动态代理实例。 总结来说,静态代理和动态代理都是为了在调用对象方法时添加额外的行为,但静态代理需要预先定义代理类,而动态代理可以在运行时动态创建代理对象。在...

    java 动态代理 简单实例

    运行这段代码,你会看到 "Before method call..."、"Doing something..." 和 "After method call..." 这样的输出,这就是动态代理在方法调用前后添加了额外操作的一个简单示例。 总结来说,Java动态代理是一种强大...

    Java反射和动态代理实例

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

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

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

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

    动态代理是Java反射机制的一个重要应用,主要用于在不修改目标对象源代码的情况下,为一个对象提供一个代理对象,这个代理对象能够控制对目标对象的访问。动态代理分为静态代理和动态代理两种类型,其中静态代理在源...

    java动态代理实例aop

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

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

    Cglib是一个第三方库,它基于ASM库动态生成子类,实现对目标类的代理。相比JDK动态代理,Cglib不需要目标类实现接口,因此适用于无法修改源码或不希望实现接口的情况。 2. **Cglib动态代理实现过程**: - 引入...

    浅谈JDK动态代理与CGLIB代理去区别

    JDK动态代理的局限性在于,它只能为实现了至少一个接口的类创建代理,因为代理对象必须继承自这些接口。这种方式适用于那些基于接口进行编程的设计,比如Spring AOP中的Advisor和Advice。 相反,CGLIB(Code ...

    JAVA动态代理实例

    下面是一个简单的Java动态代理实现例子,我们创建一个`MyService`接口和一个实现了该接口的`RealMyService`类。然后通过动态代理,我们可以为`RealMyService`添加日志功能。 ```java interface MyService { ...

    动态代理原理实例Demo

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

    JDK动态代理简单示例

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

    Java 注解+动态代理的一个实例

    ### Java 注解+动态代理实例解析 #### 一、引言 在Java开发中,**动态代理**是一种非常实用的设计模式,它可以帮助我们实现在不修改原有代码的基础上为对象添加额外的功能,比如日志记录、权限校验等。而**注解**则...

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

    以下是一个动态代理模式的示例: ```java // 目标接口 interface Target { void doSomething(); } // 目标实现类 class RealTarget implements Target { @Override public void doSomething() { System.out....

    Spring定时器与动态代理实例

    - **CGLIB简介**:CGLIB是一个强大的高性能的代码生成库,它在许多AOP框架中被使用,例如Spring AOP和dynaop,为他们提供方法的动态代理。 - **生成代理对象**:通过CGLIB的Enhancer类,我们可以创建一个代理类,...

    动态代理和cglib例子

    当我们有一个接口和它的实现类,我们可以通过动态代理创建一个与该接口兼容的对象,该对象在调用接口方法时,可以执行一些额外的操作。 1. Java动态代理机制: - 首先,我们需要定义一个接口,这是所有代理对象...

    java动态代理类的实例

    Java动态代理是Java语言提供的一种高级特性,它允许我们在运行时创建一个代理对象来代替某个接口或类的对象,这个代理对象能够对方法调用进行拦截和处理。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`...

Global site tag (gtag.js) - Google Analytics