Proxy 模式
代理的主要类:java.lang.reflect.Proxy
它定义了一套静态方法,供我们使用,其中一个最常用的方法就是生成代理对象,动态代理机制的核心是 InvocationHandler 接口
代理对象
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
它根据你传入的类加载器和这个代理将会实现的接口,以及一个调用处理器,来生成一个代理对象.
核心接口
public interface InvocationHandler {
Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;
}
请看例子:
接口1:
package com.ben.proxy;
/**
* <pre>
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public interface Talk
{
public void talk(String someone);
}
实现类1:
package com.ben.proxy;
/**
* <pre>
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public class MyTalk implements Talk
{
public void talk(String someone)
{
System.out.println("talk to "+someone);
}
}
接口2:
package com.ben.proxy;
/**
* <pre>
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public interface Write
{
public void hello(String name);
public void doAction();
}
实现类2:
package com.ben.proxy;
/**
* <pre>
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public class MyWrite implements Write
{
public void doAction()
{
System.out.println("doAction is done");
}
public void hello(String name)
{
System.out.println("hello !"+name);
}
}
动态代理:
package com.ben.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* <pre>
* 动态代理对象
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public class MyProxy<T> implements InvocationHandler
{
private T t;
public MyProxy(T t)
{
this.t = t;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
System.out.println("--------proxy:----" + proxy.getClass());
System.out.println("--------Method:---" + method);
System.out.println("--------args:-----" + args);
if (args != null)
{
for (Object o : args)
System.out.println("---------" + o);
}
return method.invoke(t, args);
}
}
将两个接口绑定到代理来调用,实现不同的事情。示例如下:
package com.ben.proxy;
import java.lang.reflect.Proxy;
/**
* <pre>
* 代理机制示例
* </pre>
* @author ben.liu
* @version 1.0, 2008-9-23
*/
public class MyProxyFactory
{
private Object o;
public void bond(Object o)
{
this.o = o;
doSth();
}
public void doSth()
{
if (o instanceof Talk)
{
Talk t = (Talk) Proxy.newProxyInstance(Talk.class.getClassLoader(), new Class[] { Talk.class },
new MyProxy(o));
t.talk("ben");
}
if (o instanceof Write)
{
Write w = (Write) Proxy.newProxyInstance(Write.class.getClassLoader(), new Class[] { Write.class },
new MyProxy(o));
w.doAction();
w.hello("bensoft");
}
}
public static void main(String[] args)
{
Talk t = new MyTalk();
Write w = new MyWrite();
MyProxyFactory ft = new MyProxyFactory();
ft.bond(t);
ft.bond(w);
}
}
通过以上MyProxyFactory类的绑定,将多个接口要做的事情在一个类中即可实现。
分享到:
相关推荐
Java动态代理机制是Java语言提供的一种强大的功能,它允许在运行时创建代理对象来实现特定接口,从而可以灵活地扩展或增强已有代码的功能。在Java中,动态代理主要通过两个类来实现:`java.lang.reflect.Proxy` 和 `...
Java代理机制是Java编程中一个重要的特性,它允许我们在不修改原有代码的基础上,为已有类增加额外的功能。本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口...
利用反射和动态代理机制实现自定义拦截器Interceptor 在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,...
利用JAVA代理Proxy机制实现spring对ibaits的MapperScannerConfigurer功能 详细:http://blog.csdn.net/wq105032007067/article/details/8812598
Java的反射机制与动态代理是Java编程中两个非常重要的高级特性,它们在许多实际场景中发挥着关键作用,如框架开发、插件系统、元数据处理等。下面将详细讲解这两个概念及其应用。 首先,Java的反射机制允许我们在...
Java代理机制是软件开发中一个重要的技术手段,特别是在实现面向切面编程、增强类的功能等方面有着广泛的应用。通过理解并掌握Java代理机制,开发者可以更加灵活地应对复杂的业务需求,提高代码的可扩展性和可维护性...
总结来说,Java动态代理为开发者提供了灵活的代码扩展机制,可以根据实际需求选择适合的实现方式。JDK动态代理适用于接口丰富的场景,而Cglib更适合对性能有较高要求或者目标对象无法实现接口的情况。
在Java中,基于动态代理和反射机制实现ORM可以提高代码的可维护性和灵活性。本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和...
### Java动态代理机制综合分析以及实现 #### 引言 Java动态代理机制为开发者提供了无需手动编写代理类的便利方式,只需指定一组接口及委托类对象即可动态获得代理类。这种代理类能够自动将所有方法调用分派到委托...
- **动态代理**:Java中的动态代理机制基于反射,可以创建一个代理类来拦截并处理方法调用,例如用于AOP(面向切面编程)。 - **插件系统**:在运行时加载未知的插件类,实现模块化和扩展性。 - **测试工具**:单元...
Java动态代理机制是一种在运行时创建代理类和代理对象的技术,它允许我们在不修改源代码的情况下,对已有的接口或类进行扩展,增加新的功能。动态代理主要应用于事件监听、事务处理、性能监控等场景,提供了更加灵活...
package com.gc.aop下为:aop方式... ... ... ... ... package com.gc.javaproxy下为:java代理机制实现 package com.gc.proxy下为:自定义代理模式(面向接口编程) package com.gc.normal下为:通用日志处理方式
在深入探讨Java动态代理的实现过程之前,我们首先需要理解动态代理的基本概念及其在Java中的应用价值。动态代理,顾名思义,是在运行时动态创建代理对象的一种机制,它无需在编译期就确定代理类的具体实现,而是通过...
通过上述介绍,我们可以看到Java代理模式及其动态代理机制为开发者提供了强大的功能扩展能力。无论是通过代理模式控制对象的访问,还是利用Java动态代理实现特定时刻的行为增强,都是在不改变现有代码结构的前提下...
总结起来,Java代理机制通过动态生成代理类和使用InvocationHandler接口,实现了对目标对象的透明代理,为开发者提供了在方法调用前后插入自定义逻辑的能力,从而提高了代码的可复用性和灵活性。这种机制在设计模式...
通过学习和理解Java动态代理机制,开发者可以更好地实现解耦和扩展性,尤其是在需要对业务逻辑进行增强或拦截的情况下。这个机制在AOP框架(如Spring AOP)中扮演着核心角色,帮助开发者实现非侵入式的代码增强。
Java动态代理机制的优点在于灵活性和便捷性,它允许在运行时动态创建符合特定接口的代理对象,无需对原有代码做任何修改,使得我们可以方便地实现诸如日志、事务控制等跨切面的逻辑。不过,动态代理仅限于代理接口,...
Java 动态代理是Java平台提供的一种强大的工具,它允许我们在运行时动态生成代理类,这些代理类可以实现一组指定的接口,同时还能在方法调用前后添加自定义的行为。这种机制大大简化了面向切面编程(AOP)和事件监听...
动态代理通常用于实现AOP(面向切面编程)或者提供一种机制来增强对象的功能,比如日志、事务管理、性能监控等。 Java中的动态代理主要有两种实现方式:JDK动态代理和CGLIB动态代理。 1. **JDK动态代理**: JDK...