静态代理类:
由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。不使用其他Java类,做到动态的调用接口的不同实现。
静态代理的优缺点
优点:不需要其他的类,实现简单;
缺点:需要更改源代码实现
如下, ProxySubject 类是代理类,RealSubject 类是委托类,这两个类都实现了ISubject 接口。其中RealSubject 类是ISubject 接口的真正实现者,而ProxySubject 类是通过调用RealSubject 类的相关方法来提供特定服务的。RealSubject 类的request()方法会调用被代理的RealSubject 对象的request()方法,并且在方法调用前后都会执行一些简单的打印操作。
由此可见,代理类可以为委托类预处理消息、把消息转发给委托类和事后处理消息等。
1、ISubject.java
package proxy; /** * @author Chu * @version 创建时间:2013-06-13 上午08:30:12 */ public interface ISubject { public void request(); }
2、RealSubject.java
package proxy; /** * @author Chu * @version 创建时间:2013-06-13 上午08:31:32 */ public class RealSubject implements ISubject { @Override public void request() { // TODO Auto-generated method stub System.out.println("realSubject requesting"); } }
3、ProxySubject.java
package proxy; /** * @author Chu * @version 创建时间:2013-06-13 上午08:33:08 */ public class ProxySubject implements ISubject { private RealSubject realSubject; public ProxySubject() { realSubject = new RealSubject(); } @Override public void request() { // TODO Auto-generated method stub System.out.println("do something before"); realSubject.request(); System.out.println("do something after"); } }
4、TestISubject.java
package proxy; /** * @author Chu * @version 创建时间:2013-06-13 上午08:41:32 */ public class TestISubject { public static void main(String[] args) { // TODO Auto-generated method stub ISubject proxySubject = new ProxySubject(); proxySubject.request(); } }
【运行结果】如下:
do something before realSubject requesting... do something after
观察代码可以发现每一个代理类只能为一个接口服务,这样一来程序开发中必然会产生过多的代理,而且,所有的代理操作除了调用的方法不一样之外,其他的操作都一样,则此时肯定是重复代码。解决这一问题最好的做法是可以通过一个代理类完成全部的代理功能,那么此时就必须使用动态代理完成。动态代理将在下一篇日志中做详细介绍。
相关推荐
【标题】"张孝祥Java高新技术源代码.rar"是一个压缩包文件,主要包含了Java高级技术相关的源代码。张孝祥,作为一个知名的Java教育专家,他的教程通常深入浅出,覆盖了Java编程的诸多核心和进阶领域。这个压缩包可能...
Java高新技术2是一个涵盖Java编程语言高级特性和技术的专题,这些技术对于开发高效、可扩展且维护性强的应用程序至关重要。以下是一些Java高新技术的关键点: 1. **多线程编程**: - Java提供了内置的多线程支持,...
在“张孝祥Java高新技术_源代码”这个压缩包中,我们主要聚焦的是Java编程语言的高级技术。Java作为一种广泛使用的面向对象的编程语言,它的高级特性为开发者提供了强大的工具和丰富的功能,使得软件开发更加高效和...
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...
在Java编程领域,Spring框架是应用最广泛的IoC(Inversion of Control)和DI(Dependency Injection)容器之一,同时也提供了强大的面向切面编程(AOP)功能。本案例"Spring模拟aop静态代理案例"旨在帮助开发者深入...
下面我们将详细探讨这些代理技术,并通过代码演示来理解它们的工作原理。 ### 1. JDK静态代理 静态代理是我们在编译时就已经知道代理类和目标类的关系。我们需要创建一个代理类,该类继承自目标接口,并实现其所有...
静态代理代理模式,顾名思义就是提供一个代理类,可以访问原对象并且替原对象进行一些操作。 优点:使用代理模式可以在保证不修改原有类的同时(即满足对扩展开放,对修改关闭的原则),对原有类增加一些功能实现。
张孝祥_Java_基础加强_高新技术.ppt
在Java编程中,代理模式是一种常见的设计模式,它允许我们为一个对象提供一个代理以控制对这个对象的访问。代理模式通常用于增加额外的功能,如日志、事务管理或者权限控制,而不会改变原始对象的接口。根据实现方式...
代理模式可以分为两种主要类型:静态代理和动态代理。这两种代理方式各有特点,广泛应用于软件系统中,如权限控制、缓存、事务管理等场景。 **静态代理** 静态代理是最基础的代理形式,代理类和被代理类在编译时就...
随着Java等语言的发展,动态代理(如Java的`java.lang.reflect.Proxy`)和C#的`System.Reflection.Emit`等技术,可以更灵活地创建代理对象,克服了静态代理的部分局限性。 总之,静态代理模式提供了一种在不修改...
52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化.zip52.java二维数组静态初始化....
静态代理和动态代理是两种常见的代理模式,它们在Java中有着广泛的应用,特别是在SpringBoot等框架中。本资源提供了一个简单的Java实现,适用于JDK1.8版本,并经过了验证,对初学者理解设计模式具有指导意义。 静态...
张孝祥 Java_基础加强 高新技术 全部内容 共67页面
Java面向对象之静态.doc
在Java编程中,代理模式是一种常用的面向对象设计模式,它允许我们为一个对象提供一个代理以控制对该对象的访问。代理模式通常用于增加额外的功能,如日志、权限检查等,或者为了创建虚拟代理以提高性能。以下是Java...
4. **使用Nginx或Apache反向代理**:另一种常见策略是将静态文件托管在一个高性能的Web服务器(如Nginx或Apache)上,然后通过Java应用服务器(如Tomcat)反向代理请求。这样,静态文件请求可以被高效地处理,而Java...
在Java编程中,代理模式是一种常用的结构型设计模式,它能提供一种在不修改原有对象的基础上,增强或扩展其功能的方式。代理模式分为静态代理和动态代理两种主要形式。 **静态代理**是程序员手动创建代理类,这个...
在Java中,我们可以使用静态代理和动态代理来实现这一目的。 **静态代理** 静态代理是在编译时就确定了代理类的结构,代理类的源代码是程序员手动编写或者由特定工具自动生成的。代理类需要实现与目标类相同的接口...
在Java编程语言中,`static`关键字扮演着至关重要的角色,它被用于声明类成员(如变量、方法)为静态的。静态成员不依赖于任何特定的对象实例,而是与类本身绑定,这意味着无论该类有多少个实例,静态成员只会有一份...