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();
        }
    }
  • 相关阅读:
    【代码笔记】iOS-NSLog的使用
    【代码笔记】iOS-NSJSONSerializationDemo
    【代码笔记】iOS-My97DatePicker日历
    【代码笔记】iOS-mp3的播放
    【代码笔记】iOS-MBProgressHUDDemo
    【代码笔记】iOS-MBProgressHUD
    【代码笔记】iOS-导航条的标题(label)
    【代码笔记】iOS-Label随字自动变大
    OC语言构造方法
    iOS开发UI篇—在ImageView中添加按钮以及Tag的参数说明
  • 原文地址:https://www.cnblogs.com/ywbmaster/p/9794804.html
Copyright © 2011-2022 走看看