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();
        }
    }
  • 相关阅读:
    【2012】笔试面试总结(二)
    sdf数据文件查看小工具
    excel表格中怎样使个别单元格变成只读
    平时收获,供需及取(PPC)
    GDI+ 绘制统计图(2D、3D)
    Com注册
    Pocket PC 录音
    我有自己的"CodeSnippet"了!
    打包Winows Mobile快捷方式中文问题?
    ORA12154: TNS: 无法解析指定的连接标识符问题解决
  • 原文地址:https://www.cnblogs.com/ywbmaster/p/9794804.html
Copyright © 2011-2022 走看看