接着说代理模式。 动态代理就是让程序在运行是自动去找代理。
客户端代码
public class Client {
public static void main(String[] args) {
// 被代理人登场
Killer killer = new NailsKiller();
// 代理登场
Killer proxy = NailsKillerProxy.newInstance(killer);
// 执行
proxy.setTarget("钉子户");
proxy.kill();
}
}
钉子户杀手NailsKiller没什么变化, 只是Killer的一个简单的实现
public class NailsKiller implements Killer {
private String target;
@Override
public void setTarget(String target) {
this.target = target;
System.out.println(this.target + " 已经被锁定");
}
@Override
public void kill() {
System.out.println(this.target + " 被干掉了");
}
}
再来看看Handler
public class NailsKillerInvocationHandler implements InvocationHandler {
private Killer killer;
public NailsKillerInvocationHandler(Killer killer) {
this.killer = killer;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return method.invoke(this.killer, args);
}
}
通用的动态代理类
public class DynamicProxy<T> {
@SuppressWarnings("unchecked")
public static <T> T newInstance(ClassLoader loader, Class<?>[] interfaces,
InvocationHandler handler) {
return (T) Proxy.newProxyInstance(loader, interfaces, handler);
}
}
具体的钉子户杀手动态代理类
public class NailsKillerProxy extends DynamicProxy {
public static <T> T newInstance(Killer killer) {
ClassLoader loader = killer.getClass().getClassLoader();
Class<?>[] clazz = killer.getClass().getInterfaces();
InvocationHandler handler = new NailsKillerInvocationHandler(killer);
return newInstance(loader, clazz, handler);
}
}
运行结果完全一样:
引用
钉子户 已经被锁定
钉子户 被干掉了
唯一的问题就是怎样把AOP应用到里面去, 比如在本例中我想实现一个当“钉子户"被锁定的时候需要给被代理人发一条消息。 这个怎样弄呢??? 大牛们给点意见。。。
分享到:
相关推荐
在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...
Java中的代理模式--静态代理和动态代理 Java中的代理模式--静态代理和动态代理
JAVA动态代理模式-.pdf
代理模式与动态代理--Spring AOP原理.doc
动态代理模式是一种在运行时创建代理对象以控制或扩展原有对象行为的设计模式。它允许我们为现有的对象提供一种代理以增强其功能,而无需修改原对象的代码。动态代理模式通常用于实现对目标对象的额外操作,如日志...
在Java中,代理模式可以通过多种方式实现,包括静态代理、动态代理(JDK动态代理和CGLIB动态代理)等。 **静态代理** 静态代理是最基础的代理形式,需要手动创建一个代理类,该类继承或实现与目标类相同的接口,并...
在Java中,代理模式主要有静态代理和动态代理两种实现方式。 1. 静态代理:在编译时就已经确定了代理类与目标类的关系。通常,代理类会实现和目标类相同的接口,以便于在代理类中调用目标类的方法。这种方式的缺点...
动态代理设计模式是一种在运行时创建对象代理的技术,它允许我们为现有的对象提供额外的功能,而无需修改原对象的代码。这种模式的核心是接口和代理类,通过接口,代理类可以与原对象进行通信,同时在代理类中添加...
在Java中,动态代理是代理模式的一种实现方式,它允许我们在运行时创建代理对象,这种方式比静态代理更加灵活。动态代理在JDK 1.3及以后的版本中得到了支持,主要涉及到三个核心类:`Proxy`、`InvocationHandler`和`...
Java编程模式-代理模式。介绍了静态代理模式和动态代理模式
代理模式又分为静态代理、jdk 动态代理、cglib 动态代理三种实现方式。每种实现方式都有其优点和适用的场景: 1. 静态代理:代理类需要非常明确,所以无法做到通用,但是效率也是最高的。静态代理需要定义一个接口...
代理模式的实现方式有多种,包括静态代理、动态代理。静态代理是在编译时就已经确定代理类,而动态代理则是在运行时动态创建代理对象,通常利用Java的`java.lang.reflect.Proxy`类或C#的`System.Reflection.Emit`...
代理模式在Java中有两种常见的实现方式:静态代理和动态代理。静态代理是通过程序员显式创建代理类来实现的,而动态代理则利用Java的反射API在运行时动态创建代理对象。 1. **静态代理**:在静态代理中,我们需要为...
- Java中的动态代理模式是一种特殊形式的代理,它是一种灵活和动态的方法,用于拦截和操作方法调用。通过使用动态代理,开发人员可以在不修改原始类代码的情况下实现额外的功能。这在需要增强现有功能的场景中特别...
结构型模式如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy),则关注如何组合和连接类与对象,以达到新的功能。行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式...
### Java代理模式与Java动态代理详解 #### 一、代理模式概述 代理模式是一种软件设计模式,它在客户端和目标对象之间提供了一种间接层。这种模式的主要目的是控制客户端对目标对象的访问,并且可以在不修改原有...
代理模式可以分为静态代理和动态代理两种。静态代理是通过手动编写代理类来实现代理的,而动态代理则是通过使用代理工厂或代理类生成器来生成代理对象。 二、静态代理 静态代理是通过手动编写代理类来实现代理的。...
在本篇Spring学习笔记中,我们将深入探讨动态代理模式,并结合Spring框架的实现进行分析演示。动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。...
动态代理设计模式是一种在运行时创建代理对象的技术,它允许我们为现有的对象提供额外的功能,如日志记录、性能监控、事务管理等,而无需修改原对象的代码。这种模式在Java和许多其他编程语言中都有应用,尤其在...