代理模式

接口

java 复制代码
public interface UserService {
    void selectAll();
}

实现类(需要增加业务)

java 复制代码
public class UserServiceImpl implements UserService{
    @Override
    public void selectAll() {
        System.out.println("查询");
    }
}

静态代理

代理类

java 复制代码
public class UserProxy implements UserService {
    // 持有具体业务实现
    private UserService userService;
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
    @Override
    public void selectAll() {
        System.out.println("不改变原有代码,进行增强");
        // 执行原有逻辑
        userService.selectAll();
    }
}

测试

java 复制代码
public static void main(String[] args) {
    UserProxy userProxy = new UserProxy();
    // 代理具体业务实现
    userProxy.setUserService(new UserServiceImpl());
    // 执行增强业务
    userProxy.selectAll();
}

动态代理

代理类

java 复制代码
public class ProxyInvocationHandler implements InvocationHandler {
    // 持有具体业务实现
    private Object object;
    public void setUserService(Object object) {
        this.object= object;
    }
    public Object getProxy(){
        // 让代理类实现具体实现类(UserServiceImpl)的接口(UserService),并重写接口方法,返回代理对象
        return Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("这里进行增强");
        // 代理类执行接口方法时,执行具体实现重写的方法
        return method.invoke(object, args);
    }
}

测试

java 复制代码
public static void main(String[] args) {
    ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();
    // 持有具体实现
    proxyInvocationHandler.setObject(new UserServiceImpl());
    // 获取代理对象(已实现具体实现的接口并重写接口方法)
    UserService proxy = (UserService) proxyInvocationHandler.getProxy();
    // 执行增强业务
    proxy.selectAll();
}
相关推荐
yaaakaaang13 小时前
十二、代理模式
java·代理模式
运维儿2 天前
7.ARP 代理与端口隔离:满足通信需求,保证通信安全
网络·智能路由器·代理模式·linux 网络·云计算网络
panzer_maus4 天前
工厂模式、代理模式与单例模式的介绍
java·设计模式·代理模式
花月C5 天前
线性动态规划(Linear DP)
算法·动态规划·代理模式
散峰而望5 天前
【基础算法】动态规划从入门到进阶:记忆化搜索、线性 DP、LIS/LCS 一网打尽
c++·后端·算法·github·深度优先·动态规划·代理模式
淡忘旧梦5 天前
ChatGPT回答白屏
人工智能·chatgpt·代理模式
会编程的土豆5 天前
【数据结构与算法】动态规划
数据结构·c++·算法·leetcode·代理模式
范纹杉想快点毕业7 天前
C语言编程实战宝典:550例精解·涵盖基础语法·数组指针·位运算·递归·贪心·动态规划
c语言·动态规划·代理模式
想不明白的过度思考者7 天前
SpringAOP:Java 三大代理模式:从静态代理到 JDK & CGLIB 动态代理
java·开发语言·代理模式
※DX3906※9 天前
SpringBoot之旅5| 快速上手SpringAOP、深入刨析动态/静态两种代理模式
java·数据库·spring boot·后端·spring·java-ee·代理模式