![]()
1、ISale.java
package com.atguigu; public interface ISale { void saleShaoBing(); void saleJianBing(); void saleYueBing(); void saleManTou(); }
2、WuDa.java
package com.atguigu; //Target:目标类、目标对象 public class WuDa implements ISale{ //target method:目标方法 @Override public void saleShaoBing() { System.out.println("卖烧饼..."); } @Override public void saleJianBing() { System.out.println("卖煎饼..."); } @Override public void saleYueBing() { System.out.println("卖月饼..."); } @Override public void saleManTou() { System.out.println("卖馒头..."); } }
3、WuDaProxy.java
package com.atguigu; /** * 静态代理代码比较容易理解,但是代码的冗余量太大了,而且不够灵活 * 一旦业务场景发生变化,那么需要去修改每一个方法内部细节 */ public class WuDaProxy implements ISale{ private WuDa target; public WuDaProxy(WuDa target) { this.target = target; } //proxy method:代理方法=目标方法+增强 @Override public void saleShaoBing() { target.saleShaoBing(); song(); //后置增强 } @Override public void saleJianBing() { song(); //前置增强 target.saleJianBing(); } @Override public void saleYueBing() { try { target.saleYueBing(); } catch (Exception e) { song(); //抛异常时增强 } } @Override public void saleManTou() { target.saleManTou(); } //送大麦茶、额外操作、增强操作、Advice private void song() { System.out.println("送大麦茶..."); } }
4、ProxyTest.java
package com.atguigu; import org.junit.jupiter.api.Test; public class ProxyTest { @Test public void test01() { //调用目标对象中的目标方法 WuDa wuDa = new WuDa(); wuDa.saleJianBing(); //卖煎饼... } @Test public void test02() { WuDa target = new WuDa(); WuDaProxy proxy = new WuDaProxy(target); //调用代理对象中的代理方法 proxy.saleJianBing(); //送大麦茶... //卖煎饼... } }
Java静态代理是指在编译期间就已经确定的代理方式,它需要手动编写代理类,并在代码中调用代理类。在静态代理中,代理类和被代理类实现了同样的接口,代理类与被代理类之间的关系在编译期间就已经确定。其基本思想是在不改变原有类的前提下,通过代理类来进行扩展和增强,实现了对原有类的控制。常见的静态代理包括:装饰器模式、适配器模式、代理模式等。
Java静态代理是一种代理模式,在这种模式下,代理对象和被代理对象实现相同的接口,并在代理对象中通过调用被代理对象的方法来实现相应的功能,同时在代理对象的方法中可以添加额外的逻辑。
静态代理中代理对象和被代理对象在编译期就已经确定,因此也称为编译时代理。静态代理相对于动态代理来说,实现简单,但是不够灵活,并且需要为每个被代理对象编写一个代理类。
Java静态代理是一种设计模式,它允许我们创建代理对象,该对象可以代表原始对象(或其他对象),并在其上添加一些额外的功能。在静态代理中,代理类在编译时就已经确定,并且代理类和原始类都要实现相同的接口。在代理类中,我们可以在原始方法调用前后添加一些其他的操作,比如日志记录、权限控制、缓存等。静态代理通常用于解决一些横切关注点(cross-cutting concern),比如日志记录、事务管理等。
Java静态代理是指由程序员创建或使用工具自动生成代理类,在编译时就已经确定将要代理的对象和方法,并且在编译期间就已经确定好了代理类的代码。在运行时,代理类和被代理类是固定的。由代理类对被代理类的方法进行包装,实现对被代理类方法的增强或控制访问权限等操作。这种代理方式的优点是代码结构清晰,可读性好,缺点是需要手动创建代理类。