设计模式之代理模式

发布于:2025-02-11 ⋅ 阅读:(36) ⋅ 点赞:(0)

代理模式代码示例:https://blog.csdn.net/weixin_39865508/article/details/141924680
代理模式的左右,一定程度上不暴露被代课对象的内容,更安全,也减少系统的耦合性

静态代理

  • 代理对象和被代理对象都继承同一个接口

  • 在代理对象的构造方法里,把被代理对象注入

  • 在代理对象重写接口的方法里,调用被代理对象的方法, 并且在这个方法前后加代理对象自己的一些操作 ,比如加日志

  • 在这里插入图片描述

动态代理

参考文档:htt在这里插入代码片ps://zhuanlan.zhihu.com/p/69936638

public interface IUserService {

    Object insert(Object obj);
}
public class UserServiceImp implements IUserService{
    @Override
    public Object insert(Object obj) {
        System.out.println("插入对象:"+obj);
        return obj;
    }
}

public class Test {
    public static void main(String[] args) {
        //1、创建被代理的对象
        IUserService userService=new UserServiceImp();
        //2、创建InvocationHandler对象来执行代理逻辑
        InvocationHandler invocationHandler=new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.print("具体处理的拦截方法:"+method.getName()+";其参数为:");
                for (Object arg : args) {
                    System.out.println(arg+",");
                }
                long l = System.nanoTime();
                System.out.println("被代理的方法开始执行..........");
                Object result = method.invoke(userService, args);//输入被代理对象
                long l1 = System.nanoTime();
                System.out.println("被代理的方法执行结束,耗时(纳秒):"+(l1-l));

                return result;
            }
        };
        //3、创建代理对象
        IUserService userServiceProxy=(IUserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(), userService.getClass().getInterfaces(), invocationHandler);
        //4、执行方法
        userServiceProxy.insert("张三");

    }
}

动态代理的应用

mybatis 中的应用 -mapppe 接口的使

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到