最近再看书时,书中使用了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的基础知识是学习的重点。Java是一种强类型、静态类型的编程语言,它的语法与...
C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)
基于游戏开发的Java语言教学初探 本文讨论了基于游戏开发的Java语言教学初探,旨在探讨如何培养学生的理论能力、分析能力、开发能力和实践能力。文章从教学设想和开发工具两个方面入手,介绍了Java语言的游戏构架、...
C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)C#的多线程机制初探(1)
这篇"基于游戏开发的Java语言教学初探"主题探讨了如何将Java语言的学习与游戏开发相结合,以提高学生的学习兴趣和编程技能。游戏开发是一个综合性的过程,涉及到图形渲染、物理模拟、人工智能、网络通信等多个方面,...
Java教学方法初探 Java课程是一门实践性课程,旨在培养学生的学习兴趣和应用知识能力。本文结合实际教学经验,探讨了Java教学方法的几点思考。 首先,学习兴趣的培养是至关重要的。只有当学生对学习内容产生兴趣时...
【基于游戏开发的Java语言教学初探】 Java语言教学在当今计算机教育中占有重要地位,尤其是在高校的程序设计课程中。然而,Java的学习曲线相对较陡,理论知识复杂且理论部分可能显得枯燥,这使得激发学生的学习兴趣...
高职Java课程设计初探 本文探讨高职院校Java课程设计的重要性和实施策略。课程建设与改革是高职院校提高教学质量的核心,也是教学改革的重点和难点。长期以来,传统学科性课程始终统治着我国的职业教育,但职业教育...
物联网专业的Java课程改革初探 本文探讨了物联网专业的Java课程改革,旨在解决当前Java课程教学中存在的问题,并提出了改革的思路和目标。改革思路分为三个方面:教师角色转变、教学内容项目化改造、教学过程的三个...
Java类加载机制详解 Java类加载机制是Java虚拟机(JVM)中的一种机制,负责将类从字节码文件加载到内存中,并将其转换为可执行的类对象。在Java中,类加载机制是通过ClassLoader来完成的,该机制在JDK 1.2以后变得...
**GWT(Google Web Toolkit)通信机制初探** GWT,全称为Google Web Toolkit,是Google推出的一个开源JavaScript开发框架,允许开发者使用Java语言来编写Web应用。它提供了丰富的组件库、编译器以及强大的客户端-...
网络舆情联动应急机制初探.doc