zoukankan      html  css  js  c++  java
  • 动态代理模式

    动态代理模式

    1.MyBatis动态代理实现无接口实现类操作数据库实现原理

    首先创建一个UserService接口

    public interface UserService {
    
        void saveUser();
    
        void findUser();
    }

    在创建回调处理器,这个回调处理器就是由创建出来的代理对象来进行调用

    public class ProxyInvocationHandler implements InvocationHandler {
    
        //目标对象
        private Object target;
    
        public ProxyInvocationHandler(Object target){
            this.target = target;
        }
    
        /**
         * @param proxy 代理对象,这个参数是代理对象在调用invoke方法时将自身this传如回来
         * @param method 当前正在调用的目标对象的方法
         * @param args 当前正在调用的目标对象的方法参数
         * @return
         * @throws Throwable
         */
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object returnVal = null;
            //调用之前
            System.out.println("before...");
            //调用目标对象的方法
            returnVal = method.invoke(target, args);
            System.out.println("after...");
            return returnVal;
        }

    写一个Main测试方法

    public class Main {
    
        public static void main(String[] args) {
            //初始化回调处理器
            InvocationHandler handler = new ProxyInvocationHandler(new UserServiceImpl());
            //动态创建一个代理对象
            //第一个参数是一个类加载器,由于在运行时动态创建了一个字节码,那么就需要类加载器来进行装载
            //第二个参数是目标对象所实现的所有接口
            //第三个参数是回调处理器实例
            //注意:创建出来的代理对象已经实现了UserService接口,因此可以进行类型转换
            UserService proxy = (UserService) Proxy.newProxyInstance(UserService.class.getClassLoader(), UserServiceImpl.class.getInterfaces(), handler);
            proxy.findUser();
            proxy.saveUser();
        }
    }
  • 相关阅读:
    检验maven的配置是否生效或正确。
    CTO、技术总监和技术经理有啥区别?
    WinScp自动执行脚本
    宝塔--服务器运维面板
    Tomcat中给server.xml加入<Context>元素
    Tomcat之Session名称修改-springboot
    修改tomcat默认的session时间
    Shiro权限框架简单快速入门
    mybatis关联查询
    <mvc:default-servlet-handler/>导致controller失效,报404错误
  • 原文地址:https://www.cnblogs.com/ywbmaster/p/9794804.html
Copyright © 2011-2022 走看看