阅读量:0
在Java中,静态代理模式通常涉及到使用java.lang.reflect.Proxy
类和java.lang.reflect.InvocationHandler
接口。虽然static
关键字在静态代理模式中没有直接应用,但我们可以利用静态方法和静态内部类来实现静态代理。
静态代理模式的主要目的是在不修改原始类代码的情况下,为原始类添加新的功能。通过创建一个代理类,我们可以在调用原始类方法之前或之后执行一些额外的操作。
下面是一个简单的静态代理模式的例子:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; // 原始接口 interface MyInterface { void doSomething(); } // 原始类实现接口 class MyInterfaceImpl implements MyInterface { @Override public void doSomething() { System.out.println("Doing something..."); } } // 代理类 class MyProxyHandler implements InvocationHandler { private Object target; public MyProxyHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("Before method call..."); Object result = method.invoke(target, args); System.out.println("After method call..."); return result; } } // 静态代理工具类 class ProxyFactory { public static <T> T createProxy(Class<T> interfaceClass, T target) { MyProxyHandler handler = new MyProxyHandler(target); return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class<?>[]{interfaceClass}, handler); } } public class StaticProxyDemo { public static void main(String[] args) { MyInterfaceImpl realObject = new MyInterfaceImpl(); MyInterface proxy = ProxyFactory.createProxy(MyInterface.class, realObject); proxy.doSomething(); } }
在这个例子中,我们定义了一个MyInterface
接口和一个实现该接口的MyInterfaceImpl
类。然后,我们创建了一个MyProxyHandler
类,它实现了InvocationHandler
接口,并在调用方法之前和之后执行一些额外的操作。最后,我们创建了一个ProxyFactory
类,它提供了一个静态方法createProxy
,用于创建代理对象。
在StaticProxyDemo
类的main
方法中,我们首先创建了一个MyInterfaceImpl
对象,然后使用ProxyFactory.createProxy
方法创建了一个代理对象。当我们调用代理对象的doSomething
方法时,实际上会调用MyProxyHandler
中的invoke
方法,从而在原始方法调用之前和之后执行一些额外的操作。