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

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

主要使用了java.lang.reflect中的Proxy类,

方法如下:

static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 

下面是利用JDBC做的测试,类似于重写了Connection的close方法。代码如下:

package com.victor_03;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.sql.DriverManager;import org.junit.Test;public class MyPool {    private String url = "jdbc:mysql://192.168.244.144:3306/test";    private String user = "root";    private String password = "123456";    @Test    public void ProxyTest() throws Exception {        Class.forName("com.mysql.jdbc.Driver");        final Connection conn = DriverManager.getConnection(url, user, password);        Connection proxy = (Connection) Proxy.newProxyInstance(                            conn.getClass().getClassLoader(), //类加载器                         //目标对象实现的接口,因该Connection本来就是个结果,故使用这种方法,如果目标对象本身是类,则使用方式为:conn.getClass().getInterfaces()                            new Class[] { Connection.class },                             new InvocationHandler() { //当调用conn对象方法时,自动触发事务处理器                    @Override                    public Object invoke(Object proxy, Method method,                            Object[] args) throws Throwable {                        Object result = null;                        String methodName = method.getName();                        if ("close".equals(methodName)) {                            System.out.println("开始执行close方法");                        } else {                            result = method.invoke(conn, args);                        }                        return result;                    }                });        proxy.close();    }}

 

转载于:https://www.cnblogs.com/ivictor/p/5072462.html

你可能感兴趣的文章
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
OpenFire 的安装和配置
查看>>
ZJOI2018游记Round1
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
ios应用版本号设置规则
查看>>
海上孤独的帆
查看>>
error: more than one device and emulator 问题解决
查看>>