最近再看书时,书中使用了java的动态代理机制,随即在网上搜了些文章看了一下,既然有动态代理那就有静态代理,所谓静态代理,就是在你些的代理类中需要使用到具体的被代理类。而所谓动态代理,则不需要在代理类中使用到被代理类,根本不知道起要代理那个类。在jdk1.3后java加入了动态代理功能的api,动态代理主要用在面向接口编程上,业务逻辑的实现类必须实现某业务接口,通过使用动态代理, 我们可以在代理类中拦截器功能。java的动态代理功能是通过实现java.lang.reflect.InvocationHandler接口来实现的。实现类必须实现接口中定义的invoke方法。下面是一段实现动态代理的代码。
package com.spring;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.logging.*;
/**
* 此类用于实现动态代理
* @author paul
*
*/
public class LogHandler implements InvocationHandler {
private Logger logger = Logger.getLogger(this.getClass().getName());
private Object delegate;
//绑定被代理对象,返回被代理对象所实现的接口
public Object bind(Object delegate) {
this.delegate = delegate;
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),
delegate.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = null;
try {
log("method1" + method);
result = method.invoke(delegate, args);
logger.log(Level.INFO, "method ends" + method);
} catch (Exception e) {
log(e.toString());
}
return result;
}
private void log(String message) {
logger.log(Level.INFO, message);
}
}
一下是定义业务逻辑方法的
package com.spring;
public interface IHello {
public void hello(String name);
}
一下是接口实现类,即业务逻辑实现类
package com.spring;
/**
* 此类用于实现业务逻辑
* @author Administrator
*
*/
public class HelloSpeaker implements IHello {
/**
* 实现接口方法
* @return void
*/
public void hello(String name) {
System.out.println("Hello," + name);
}
}
一下是用于测试的类
package com.spring;
public class ProxyDemo {
/**
* @param args
*/
public static void main(String[] args) {
// HelloProxy proxy=new HelloProxy(new HelloSpeaker());
// proxy.hello("paul");
LogHandler loghandler = new LogHandler();
IHello helloProxy = (IHello) loghandler.bind(new HelloSpeaker());// 绑定代理对象
helloProxy.hello("paul");// 该句执行时会调用invoke方法
}
}
分享到:
相关推荐
#### 一、Java反射机制概述与初探 Java反射机制是Java语言的一项重要特性,它使得程序能够在运行时动态地获取对象的信息并进行操作。这种强大的特性使得Java更加灵活多变,尤其是在构建框架和工具时能够发挥重要...
首先,Java作为一门广泛使用的编程语言,其高级编程涵盖了多方面的知识,包括多线程、网络编程、I/O流、反射机制、设计模式等。在教学过程中,教师可以通过设计具有实际意义的项目,让学生在解决实际问题的过程中...
C# 通过反射初探ORM框架的实现原理 在本文中,我们将探讨C# 通过反射初探ORM...在C#中,我们可以使用反射机制来实现简单的ORM框架,通过反射机制,我们可以动态地获取对象的属性和方法,并且可以进行与之相关的调用。
压缩包可能还涵盖了异常处理、类和对象、继承、接口、抽象类、访问修饰符、封装、构造器、集合框架(List、Set、Map)、IO流、反射、枚举、泛型等Java 8的关键特性。 每个章节都会通过实例和练习帮助学习者巩固所...
这通常是通过Java的反射机制来实现的。反射提供了在运行时动态访问和操作类的能力,主要包括以下几个方面: - **Class对象**:可以通过类名或者实例来获取一个类的Class对象,进而访问该类的所有信息。 - **...
在初探信号槽的基础上,本节深入讲解了信号槽机制的高级用法和技巧。 8. META-OBJECT系统 Qt的META-OBJECT系统用于提供反射特性,支持信号和槽等Qt特性的实现。本节介绍了META-OBJECT系统的基础知识。 9. ...
DLP_Repository是一个专注于编程语言设计实践的存储库,主要以Java编程语言为载体进行讨论和实现。...无论是对Java编程语言的深度挖掘,还是对编程语言设计的初探,DLP_Repository都是一个宝贵的资源。