Java Proxy代理有哪些常见类型

发布时间:2025-05-26 08:00:17 作者:小樊
来源:亿速云 阅读:93

Java中的代理主要分为两种类型:静态代理和动态代理。下面是这两种代理的详细介绍:

静态代理

  1. 定义
  1. 优点
  1. 缺点
  1. 示例
// 定义接口
public interface Subject {
    void request();
}

// 实现接口的具体类
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("RealSubject: Handling request.");
    }
}

// 代理类
public class StaticProxy implements Subject {
    private RealSubject realSubject;

    public StaticProxy(RealSubject realSubject) {
        this.realSubject = realSubject;
    }

    @Override
    public void request() {
        System.out.println("StaticProxy: Pre-processing before request.");
        realSubject.request();
        System.out.println("StaticProxy: Post-processing after request.");
    }
}

// 使用代理
public class Client {
    public static void main(String[] args) {
        RealSubject realSubject = new RealSubject();
        StaticProxy proxy = new StaticProxy(realSubject);
        proxy.request();
    }
}

动态代理

  1. 定义
  1. 优点
  1. 缺点
  1. 示例
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

// 定义接口
public interface Subject {
    void request();
}

// 实现接口的具体类
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("RealSubject: Handling request.");
    }
}

// 动态代理处理器
public class DynamicProxyHandler implements InvocationHandler {
    private Object realSubject;

    public DynamicProxyHandler(Object realSubject) {
        this.realSubject = realSubject;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("DynamicProxy: Pre-processing before request.");
        Object result = method.invoke(realSubject, args);
        System.out.println("DynamicProxy: Post-processing after request.");
        return result;
    }
}

// 使用动态代理
public class Client {
    public static void main(String[] args) {
        RealSubject realSubject = new RealSubject();
        InvocationHandler handler = new DynamicProxyHandler(realSubject);
        Subject proxySubject = (Subject) Proxy.newProxyInstance(
            realSubject.getClass().getClassLoader(),
            realSubject.getClass().getInterfaces(),
            handler
        );
        proxySubject.request();
    }
}

其他类型

除了上述两种常见的代理类型,Java中还有一些其他的代理技术:

  1. CGLIB代理
  1. JDK动态代理
  1. AspectJ

选择哪种代理类型取决于具体的应用场景和需求。

推荐阅读:
  1. Java的代理模式有哪些
  2. Java中的代理模式有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Java Proxy代理如何提升网络安全性

下一篇:Java Proxy代理在云计算环境下的优势

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》