- 浏览: 919699 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
InvocationHandler 用于实现代理。
如果不用InvocationHandler接口实现代理的话,我们写代码是这样的:
定义一个接口:
Java code
interface Greet
{
void sayHello(String name);
void goodBye();
}
实现这个接口:
Java code
class GreetImpl implements Greet
{
public void sayHello(String name)
{
System.out.println("Hello " + name);
}
public void goodBye()
{
System.out.println("Good bye.");
}
}
实现一个代理类
Java code
public class SimpleProxy implements Greet
{
private Greet greet = null;
SimpleProxy(Greet greet)
{
this.greet = greet;
}
public void sayHello(String name)
{
System.out.println("--before method sayHello");
greet.sayHello(name);
System.out.println("--after method sayHello");
}
public void goodBye()
{
System.out.println("--before method goodBye");
greet.goodBye();
System.out.println("--after method goodBye");
}
/**
* @param args
*/
public static void main(String[] args)
{ Greet tmp = new GreetImpl(); //生成代理
Greet greet = new SimpleProxy(tmp);
greet.sayHello("walter");
greet.goodBye();
}
}
===============================================================================
代理其实没什么的,再看看如果实现了InvocationHandler接口,
我们怎样实现代理。
还是要实现原来的Greet接口。
接口的实现还是GreetImpl。
Java code
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class DebugProxy implements java.lang.reflect.InvocationHandler
{
private Object obj;
public static Object newInstance(Object obj)
{
return java.lang.reflect.Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), new DebugProxy(obj));
}
private DebugProxy(Object obj)
{
//Greet接口的實現:GreetImpl
this.obj = obj;
}
//Method m:調用的方法
//Object[] args:方法要傳入的參數 //invoke实现对GreetImpl中方法的调用,同时也可以在这里加入自己想要实现的操作, //虽然调用原GreetImpl中的方法重要,但我想这里更看重的是通过自定义处理实现GreetImpl中没有的功能
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
{
Object result;
try
{
//自定義的處理
System.out.println("--before method " + m.getName());
//調用GreetImpl中方法
result = m.invoke(obj, args);
}catch(InvocationTargetException e)
{
throw e.getTargetException();
}catch(Exception e)
{
throw new RuntimeException("unexpected invocation exception: " + e.getMessage());
}finally
{
System.out.println("--after method " + m.getName());
}
return result;
}
/**
* @param args
*/
public static void main(String[] args)
{
Greet tmp = new GreetImpl();
Greet greet = (Greet) DebugProxy.newInstance(tmp);
//生成的greet和tmp有相同的hashCode
//通过DebugProxy构造的greet比原temp拥有更多功能
greet.sayHello("walter");
greet.goodBye();
}
}
发表评论
-
maven 在Mac OS下运行的问题总结
2014-05-16 17:24 834在maven下生成基本的项目结构。 生成eclipse项 ... -
【zz】 java函数参数类型后添加三点的用法
2012-07-02 09:48 1052今天看到一个没见过的函数参数列表test(int... a), ... -
【zz】Java编码的理解和Java加载器的理解
2012-06-08 15:59 757一,我对java中编码的理解1. 编码的产生 对电脑而言 ... -
类加载器入门级应用
2012-06-08 15:17 9311、类加载器负责加载 Ja ... -
ClassLoader详解
2012-06-08 14:23 1253Point One 将J2EE应用程序移植到W ... -
Java静态代理与动态代理
2012-05-29 10:32 945JAVA的静态代理与动态代 ... -
JDK的动态代理深入解析(Proxy,InvocationHandler)(转)
2012-05-29 10:31 5195调用处理器InvocationHandle ... -
zz 动态反射实现AOP的简单原理
2012-05-28 17:46 904其实AOP的意思就是面向切面编程. OO注重的是我们 ... -
理解Java枚举在单例模式的应用
2012-06-05 15:50 12825.3.9 单例和枚举 按照《高效Java 第二版》中的说 ... -
Java 枚举的介绍
2012-05-23 16:50 0一、使用简单程序完成枚举的功能 例:使用简单类完成枚举操作 ... -
枚举类型的用法
2012-06-05 15:50 1436DK1.5引入了新的类型——枚举。在 Java 中它虽然算 ... -
单例模式的七种写法 (包括1.5新特性)
2012-05-23 16:18 0第一种(懒汉,线程不安全): <!--<br / ... -
重写hashCode方法的意义
2012-05-23 16:01 1652Java中的很多对象都override了equ ... -
JDK Log的设计思想
2012-05-23 14:39 1316最近在看《Agile Java》,看到日志一节,收获颇多,所以 ... -
[zz] Synchronized和Static Synchronized区别
2012-05-23 14:07 790通过分析这两个用法的分析,我们可以理解java中锁的概念。一 ... -
双精度、单精度的有效位数
2012-05-22 17:25 5118浮点数7位有效数字。(应该是单精度数) 双精度数16位有效 ... -
DecimalFormat 使用方法
2012-05-22 16:44 1031我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Ja ... -
Java Applet 无法运行的一个问题
2012-04-28 15:09 2541当你用JDK1.6开发出的新功能,在JDK1.6上re ... -
JDK1.5之中的Map相关的类
2012-04-26 10:14 1872java5的java.util包提供了大量集合类。其中最常用的 ... -
设计模式应用场景总结
2012-04-11 16:47 1276在J2EE的开发和测试中,其实不知不觉已经使用了许多设计模式。 ...
相关推荐
在Java中,动态代理是实现委托模式的一种常见方式,它允许我们在运行时创建具有特定接口的代理类实例。下面我们将详细探讨如何使用Java动态代理实现委托模式,以及相关的源码和工具应用。 首先,理解委托模式的基本...
### JAVA23中设计模式详解 #### 一、概述 设计模式是在软件设计过程中解决常见问题的一套可复用的解决方案。《JAVA23中设计模式》是一份针对Java程序员的指南,旨在通过一系列示例和理论讲解,帮助读者理解和掌握...
Java中的代理模式是一种设计模式,它允许我们创建一个代理类,该类代表并增强另一个对象(委托类)的功能,而不改变原始对象的行为。代理模式在软件开发中常用于控制访问、增加额外功能或提供安全机制。 一、代理...
**在Java中实现事件委托**:虽然Java的标准库并不直接支持事件委托,但可以通过自定义事件和发布/订阅模型来实现类似的功能。例如,可以创建一个事件类,包含事件类型和数据,并使用发布者(Publisher)和订阅者...
Java代理机制允许我们在运行时动态创建一个实现了一组给定接口的新类,这个新类可以作为原类的代理,提供额外的功能,如日志、事务管理或者,如题目中所述,权限控制。JDK代理是Java标准库提供的一个实现,位于`java...
代理模式的核心思想是通过代理类作为委托类的替代品,控制对委托类的访问,同时可以在代理类中添加额外的逻辑。在Java中,代理类和委托类通常实现相同的一组接口,这样代理类就可以代替委托类被客户端调用,而客户端...
实现方式通过手动编写代理类,实现代理模式。 特点在编译期就生成了代理类,代理类持有委托类的实例,代为执行具体类实例方法。 应用场景适用于简单的代理需求,代码直观易懂。 2. JDK动态代理 实现方式利用...
总结一下,`JAVA代理`涉及到的主要知识点包括: 1. **静态代理**:手动创建代理类,通过代理类对目标对象进行方法调用的拦截和增强。 2. **动态代理**:利用Java的`Proxy`类和`InvocationHandler`接口,动态地创建...
在代理模式中,有三个关键角色: 1. **原始对象(Real Subject)**:这是代理模式所代理的真实对象,它实现了与代理对象相同的接口,以便于代理对象可以在任何需要的地方代替它。 2. **代理对象(Proxy)**:代理...
代理模式是一种常见的设计模式,在《Design Patterns in Java》一书中对其有明确的定义:“代理模式为一个对象提供一个代理,以控制对该对象的访问。”简而言之,代理模式允许我们在不修改原始类的情况下,通过引入...
Java动态代理机制以其独特的方式几乎完美地体现了代理模式的设计思想。 #### 相关的类和接口 为了深入了解Java动态代理的工作原理,我们需要熟悉以下几个关键的类和接口: - **`java.lang.reflect.Proxy`**:这是...
在代理模式中,主要涉及以下几个概念: 1. **委托类(Subject)**:定义了客户端所关心的行为,通常是一个接口或抽象类。 2. **代理类(Proxy)**:与委托类具有相同的接口,它包含了对委托类的引用,通过代理类可以...
Java中的代理模式是一种设计模式,它允许我们创建一个代理对象,该对象可以在调用实际对象的方法之前或之后执行额外的操作,而无需修改原始代码。在Java中,代理主要分为静态代理和动态代理。 1. 静态代理: 静态...
在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。下面我们将详细讨论这两种核心组件以及它们的工作原理。 1. **Proxy类**: - `Proxy`类是Java动态...
通过以上步骤,我们就可以在Objective-C中实现一个简单的代理模式。这只是一个基础的示例,实际应用中,代理模式可以处理更复杂的交互逻辑和通信需求。在学习和实践中,不断深入理解代理机制,能更好地掌握iOS开发中...
代理模式的核心思想是通过代理对象来控制对原始对象(也称为委托对象)的访问,以此来实现额外的功能或者策略。在Java中,我们可以使用静态代理和动态代理来实现这一目的。 **静态代理** 静态代理是在编译时就确定...
这里可以采用代理模式中的保护代理来控制对这些功能的访问。 ```java // 抽象权限角色 interface Permission { void modifyUserInfo(); void viewNote(); void publishNote(); void modifyNote(); } // 真实...
代理模式是面向对象设计模式中的一种,主要用于当直接访问某个对象时会带来不便或需要增加额外的功能。代理模式通过创建一个对象来控制对另一个对象的访问,它属于结构型设计模式之一。 #### 二、代理模式分类 ...
委托设计模式,也称为代理模式的一种特殊情况,主要用于将任务的调用和分配职责分开。在Java中,一个对象可能会委托另一个对象来执行某些任务,这种方式可以将复杂的操作分解为多个简单的部分,每个部分由不同的对象...