3

每次我们实现 PooledConnection 时,我们都会编写

class MyConnection implements PooledConnection, Connection {
  // implement methods of PooledConnection and Connection 
}

我想知道为什么PooledConnection不设计为extends Connection?因为毕竟aPooledConnection总是 a 。Connection

4

3 回答 3

2

我不确定,但我想PooledConnection不扩展的原因Connection是您可以制作一个PooledConnection使用任何其他现有Connection实现的更简单的实现,允许代码重用并保持功能分离。

于 2012-07-18T10:10:07.470 回答
2

...因为 PooledConnection 毕竟总是一个 Connection 。

实际上,这就是重点。PooledConnection界面设计允许PooledConnection实例成为与实例不同的对象Connection

为什么要这么做?那么在 XA 实现中,可能有Connection来自不同数据库供应商的许多不同实现,并且这些PooledConnection类旨在处理最重要的“东西”;例如跨多个数据库的事务协调。保持这两个接口不同意味着 XA 实现不需要将 XA 级连接实现为包装对象。

当然,既然PooledConnectionConnection 接口,它们可以由同一个连接类实现......如果情况需要的话。

(或者至少,这是我的理论。要获得明确的答案,您需要询问编写产生这些接口的规范的人。)

于 2012-07-18T10:26:22.637 回答
1

APooledConnection是物理连接的句柄。这个物理连接对象可能是一个 JDBC Connection,但另一方面它也可能是一个较低级别的特定于数据库的构造。

句柄是连接池用来创建逻辑Connection对象以分发给连接池的客户端(使用该getConnection()方法。当客户端关闭该连接时,连接池会被通知该连接PooledConnection再次可用。

APooledConnection不打算直接用作 a Connection,因此它不扩展 Connection 接口。

于 2012-07-19T18:26:13.427 回答