Java动态代理深入理解:Proxy的动态创建案例

原创 心已赠人 2024-10-25 04:12 69阅读 0赞

在Java中,动态代理是一个强大的工具,它允许我们在运行时根据需要创建和配置对象。这通常用于实现行为拦截、提高性能或管理复杂性。

以下是一个使用Proxy动态创建对象并进行方法拦截的简单示例:

  1. 创建接口(Interface):

    1. public interface MyInterface {
    2. void doSomething();
    3. }
  2. 实现接口(Implement Interface):

    1. class MyRealObject implements MyInterface {
    2. @Override
    3. public void doSomething() {
    4. System.out.println("Doing something...");
    5. }
    6. }
  3. 创建动态代理(Create Dynamic Proxy):
    这里我们使用Java的反射API来创建Proxy对象。
    ```java
    import java.lang.reflect.Proxy;

public class DynamicProxyExample {

  1. private static final Class<MyInterface> clazz = MyInterface.class;
  2. private static final Object realObject = new MyRealObject();
  3. private static final Method methodTo Intercept = clazz.getMethod("doSomething");
  4. public static void main(String[] args) {
  5. // 创建动态代理对象
  6. MyInterface proxyInstance = (MyInterface) Proxy.newProxyInstance(
  7. getClass().getClassLoader(),
  8. new Class[]{ clazz },
  9. new MyInvocationHandler(realObject, methodTo Intercept))
  10. ;
  11. // 使用动态代理对象进行方法调用
  12. proxyInstance.doSomething();
  13. }

}

// 这是动态代理处理的逻辑,它接收来自代理对象的方法调用,并在必要时转发给实际对象
class MyInvocationHandler implements InvocationHandler {
private final Object realObject;
private final Method methodTo Intercept;

  1. public MyInvocationHandler(Object realObject, Method methodTo Intercept) {
  2. this.realObject = realObject;
  3. this.methodTo Intercept = methodTo Intercept;
  4. }
  5. @Override
  6. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  7. if (methodTo Intercept.equals(method)) && args.length == 0) {
  8. // 这个方法需要被代理,且没有参数
  9. return method.invoke(realObject);
  10. } else {
  11. // 其他情况,直接返回调用对象本身
  12. return proxy;
  13. }
  14. }

}
```

这个例子中,我们首先定义了一个接口MyInterface和一个实现了这个接口的类MyRealObject。然后我们创建了一个动态代理对象,并通过反射来拦截特定方法的调用。

这就是Java动态代理的基本思想:在运行时根据需要创建并配置对象的行为。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,69人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java动态代理Proxy

    动态代理,实现了方法开闭原则,把实现类交给代理实现,把接口交给代理实现,把对象交给代理操作 代理代理的三种形态:接口,类,对象 三种代理实现方式: 接口: //