package com.yunchow.util;
import java.sql.*;
import java.lang.reflect.*;
/**
* connection处理器
* @author yunchow
* @version 1.2 09/8/6
*/
class MyConnection implements InvocationHandler {
/** 目标对象 */
private Connection targetConnection;
/** 代理对象 */
private Connection proxyConnection;
MyConnection(Connection conn) {
targetConnection = conn;
}
/**
* 释放一个连接资源
*/
void release() {
try {
if(targetConnection != null)
targetConnection.close();
//System.out.println("清除成功\t" + targetConnection.createStatement());
} catch(Exception ex) {
ex.printStackTrace();
}
}
Connection getProxy() {
proxyConnection = (Connection)Proxy.newProxyInstance(this.getClass().getClassLoader(),
new Class[]{Connection.class, DBSourceRelease.class},this);
return proxyConnection;
}
public Object invoke(Object proxy,Method method,Object[] args)
throws Throwable {
if("close".equals(method.getName())){ // 截获close方法
MyDataSource.rebackConnection(proxyConnection);
return null;
} else if("release".equals(method.getName())) {
release();
return null;
}
return method.invoke(targetConnection, args);
}
}
分享到:
相关推荐
装饰模式和动态代理模式是Java编程中两种非常重要的设计模式,它们都在代码的扩展性和灵活性方面发挥着关键作用。下面将分别对这两种模式进行详细解释,并结合手写的数据库连接池和动态代理模式的使用进行深入探讨。...
- 在`ConnectionFactory`中,需要实现一个`getProxyConnection`方法,该方法返回一个实现了`java.sql.Connection`接口的动态代理对象。这个代理对象将拦截所有对`Connection`接口方法的调用,并通过`...
总结来说,通过Java的动态代理机制,我们可以创建一个透明的数据库连接代理,接管`Connection.close()`方法,以实现更灵活、低耦合的数据库连接池管理。这种方法不仅简化了用户接口,还增强了系统的可维护性和扩展性...
Java动态代理机制是一种强大的工具,它允许我们在运行时创建具有特定接口的新对象,这些对象的行为在编译时未被明确指定。动态代理通常用于实现AOP(面向切面编程)和拦截器模式,使得我们可以在不修改源代码的情况...
- `SametimeProxySettings`: 如果Sametime服务器需要通过代理访问,这里设置代理信息。 #### 三.4 启动WAS 完成参数修改后,重启WebSphere Application Server,让新的配置生效。启动过程应确保没有错误发生,否则...
- **定义**:动态代理是在运行时动态创建而无需编写代理类的代码,它通常利用JDK自带的API或者第三方库如CGLIB来实现。 - **应用场景**:AOP(面向切面编程)就是一个典型的使用场景,通过动态代理可以在不修改...
### 使用Java动态代理实现一个简单的网络请求拦截器 #### 一、引言 在软件开发过程中,为了增强程序的功能或方便进行调试与监控,我们常常需要在不改变原有业务逻辑的基础上,添加一些额外的行为(如日志记录、...
5. **代理的切换与选择**:在多项目多工程中,可能需要根据不同的需求动态切换或选择代理。这可以通过维护一个代理池,并在每次请求前检查请求的上下文信息,选择合适的代理。 6. **图片比较**:`代理版百度搜索....
代码如下:Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0 很明显这是连接初始化阶段就丢失了连接的错误。 google半天大多是说的注释掉配置文件中 bind-address = ...
下面我们将详细介绍如何设置Internet Explorer (IE)浏览器的网络代理,以符合"Internet connection proxy setup"的主题。 首先,打开Internet Explorer浏览器。这是Windows操作系统中常见的默认浏览器,用户可以...
在.NET 6中,开发人员可能会遇到一个情况,即网络请求不会随着系统网络代理设置的改变而自动切换代理。...无论是手动配置,还是利用系统API动态获取,确保正确处理代理设置是保证应用程序网络功能正常的关键。
由于 java.sql.Connection 本身是一个接口,因此我们可以使用动态代理机制来拦截 Connection 对象上的所有方法调用,包括 close 方法。 通过使用 JAVA 中的动态代理机制,我们可以实现一个高效、灵活的数据库连接池...
- **事件处理**:SignalR提供了`Connection.Start()`方法来启动连接,同时需要监听`Connected`、`Disconnected`、`Error`等事件,以便在连接状态变化时作出相应处理。 - **发送和接收数据**:在代理模式下,通过代理...
- **代理属性**: 设置代理任务的细节,如代理执行条件等。 - **页面属性**: 自定义页面布局和样式等。 - **规则属性**: 定义触发规则的条件及相应动作。 **组织条目** - 可以通过创建文件夹等方式整理条目,使界面...
本篇文章将详细探讨如何使用Java通过URL下载图片,以及如何在需要时利用代理进行下载。 首先,让我们了解基本的URL下载图片流程。在Java中,我们可以使用`java.net.URL`类来创建一个表示URL的对象,然后使用`java...
在Java中,代理模式主要分为静态代理和动态代理两种。 在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,...
此外,熟悉源码也有助于自定义网络行为,如动态更换代理IP、实现多线程并发请求等。 在实际应用中,我们可以结合易语言的其他功能,如文件操作、数据库访问等,构建更复杂的系统。例如,配合爬虫库,我们可以开发一...
另外,如果你的应用程序需要处理多个不同的代理设置,或者需要动态切换代理,你可以使用`java.net.Proxy`类和`java.net.ProxySelector`类。`Proxy`类表示一个网络协议代理,而`ProxySelector`类允许你自定义选择代理...