博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态代理模式
阅读量:5305 次
发布时间:2019-06-14

本文共 1464 字,大约阅读时间需要 4 分钟。

动态代理模式

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();    }}

 

转载于:https://www.cnblogs.com/ywbmaster/p/9794804.html

你可能感兴趣的文章
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
Node 中异常收集与监控
查看>>
七丶Python字典
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
nodejs vs python
查看>>
poj-1410 Intersection
查看>>
Java多线程基础(一)
查看>>
TCP粘包拆包问题
查看>>
Java中Runnable和Thread的区别
查看>>
SQL Server中利用正则表达式替换字符串
查看>>
POJ 1015 Jury Compromise(双塔dp)
查看>>
论三星输入法的好坏
查看>>
Linux 终端连接工具 XShell v6.0.01 企业便携版
查看>>
JS写一个简单日历
查看>>
LCA的两种求法
查看>>
Python 发 邮件
查看>>