在正式开始动态代理模式的介绍之前,先同大家一起回顾一下代理。
那么如何理解代理呢?我们在程序中为了提供额外的或不同的操作,插入的用来代替实际对象的对象,通常充当着中间人的角色。
简单代理示例代码:
package com.tu.test.proxy;
public interface Interface {
void doSomething();
void somethingElse(String arg);
}
package com.tu.test.proxy;
public class RealObject implements Interface {
@Override
public void doSomething() {
System.out.println("doSomething....");
}
@Override
public void somethingElse(String arg) {
System.out.println("somethingElse..." + arg);
}
}
package com.tu.test.proxy;
public class SimpleProxy implements Interface {
private Interface proxied;
public SimpleProxy(Interface proxied) {
this.proxied = proxied;
}
@Override
public void doSomething() {
System.out.println("SimpleProxy doSomething...");
proxied.doSomething();
}
@Override
public void somethingElse(String arg) {
System.out.println("SimpleProxy somethingElse..." + arg);
proxied.somethingElse(arg);
}
}
package com.tu.test.proxy;
public class SimpleProxyDemo {
public static void consumer(Interface iface){
iface.doSomething();
iface.somethingElse("proxy");
}
public static void main(String[] args) {
consumer(new RealObject());
consumer(new SimpleProxy(new RealObject()));
}
}
认识了简单代理,现在开始认识动态代理!
动态代理就是动态地创建代理并动态地处理对所代理方法的调用。
使用了动态代理,所有调用都会被重定向到一个单一的调用处理器(一个实现InvocationHandler接口的类)上。
说太多没多大意思,结合具体示例代码来理解。
package com.tu.test.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicProxyHandler implements InvocationHandler {
private Object proxied;//要被代理的对象
public DynamicProxyHandler(Object proxied) {
this.proxied = proxied;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("proxy:" + proxy.getClass() + ",method:" + method + ",args:" + args);
if (args != null) {
for (Object arg : args) {
System.out.println(" " + arg);
}
}
//执行method.invoke方法之前可以进行方法的过滤,判断method.getName()
return method.invoke(proxied, args);
}
}
package com.tu.test.proxy;
import java.lang.reflect.Proxy;
public class SimpleDynamicProxy {
public static void consumer(Interface iface){
iface.doSomething();
iface.somethingElse("proxy");
}
public static void main(String[] args) {
RealObject real = new RealObject();
consumer(real);
//insert a proxy and call method again
/**
* 创建一个动态代理:Proxy.newProxyInstance(参数1:通过一个已经加载的对象获取类加载器,参数2:该代理实现的接口列表,参数3:单一的调用处理器InvocationHandler)
* **/
consumer((Interface)Proxy.newProxyInstance(Interface.class.getClassLoader(), new Class[]{Interface.class}, new DynamicProxyHandler(real)));;
}
}
相关推荐
动态代理模式是一种在运行时创建代理对象以控制或扩展原有对象行为的设计模式。它允许我们为现有的对象提供一种代理以增强其功能,而无需修改原对象的代码。动态代理模式通常用于实现对目标对象的额外操作,如日志...
Java动态代理模式与适配器模式是两种在软件设计中常用的设计模式,它们都有各自的优点和应用场景。在Java中,动态代理模式主要依赖于Java的反射API和InvocationHandler接口,而适配器模式则用于解决不同接口之间的...
装饰模式和动态代理模式是Java编程中两种非常重要的设计模式,它们都在代码的扩展性和灵活性方面发挥着关键作用。下面将分别对这两种模式进行详细解释,并结合手写的数据库连接池和动态代理模式的使用进行深入探讨。...
本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切面,它包含两个主要部分:切点(Pointcut)和通知(Advice)。切点定义了在程序...
动态代理模式是面向切面编程(AOP)中的一种实现方式,它允许我们在不修改原有对象代码的基础上,为对象添加额外的功能。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect....
以下是一个简单的动态代理模式示例: ```java public interface Service { void doSomething(); } public class DynamicProxy implements InvocationHandler { private Object target; public DynamicProxy...
Java动态代理模式是一种设计模式,它可以为其他对象提供一种代理以控制对这个对象的访问。在Java中,动态代理是利用反射机制实现的,可以在运行时动态生成代理类和对象。它主要应用于需要控制对象访问、提供额外功能...
- Java中的动态代理模式是一种特殊形式的代理,它是一种灵活和动态的方法,用于拦截和操作方法调用。通过使用动态代理,开发人员可以在不修改原始类代码的情况下实现额外的功能。这在需要增强现有功能的场景中特别...
动态代理设计模式是一种在运行时创建代理对象的技术,它允许我们为现有的对象提供额外的功能,如日志记录、性能监控、事务管理等,而无需修改原对象的代码。这种模式在Java和许多其他编程语言中都有应用,尤其在...
本文将深入探讨"简单动态代理模式",以及如何利用`InvocationHandler`接口来实现这一模式。 首先,我们要理解动态代理与静态代理的区别。静态代理是我们在编译时期就知道代理类和真实对象之间的关系,而动态代理则...
在本示例中,我们将深入探讨如何利用Spring框架与JDBC的整合来实现转账业务,并通过动态代理模式来优化事务管理。动态代理模式是Java中一种强大的设计模式,它允许我们在运行时创建对象的代理,以拦截方法调用并执行...
### Java中的动态代理模式 #### 一、动态代理的基本概念 动态代理是一种设计模式,它允许程序员在运行时创建一个接口的实现类实例,而无需提前定义这些实现类。这种模式在很多框架中都有应用,比如Spring框架中的...
在本篇Spring学习笔记中,我们将深入探讨动态代理模式,并结合Spring框架的实现进行分析演示。动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。...
动态代理是实现AOP的一种常用技术,它允许在运行时创建代理对象,拦截对真实对象的调用,并在调用前后添加额外的行为。 在Java开发中,反射机制是实现动态代理的关键技术之一。反射提供了在运行时访问和操作类的...
引入了动态代理模式和mysql数据库的处理,对core java内容进行了一次深入的实践,实现了功能有开户、销户、存款、取款、转账等等
CGLIB动态代理模式所需jar包
JAVA动态代理模式-.pdf
2. 动态代理:动态代理模式在Java中主要通过Java的反射API和InvocationHandler接口实现。它可以动态地生成一个代理类,该代理类能够拦截对原对象的调用,并在调用前后添加额外的行为。这种模式常用于AOP(面向切面...