jdbc为什么不是从java.sql.Connection继承的javax.sql.PooledConnection

时间:2012-07-18 10:01:20

标签: java jdbc

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

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

我想知道为什么PooledConnection没有被设计为extends Connection?因为PooledConnection毕竟总是Connection

3 个答案:

答案 0 :(得分:2)

我绝对不确定,但我认为PooledConnection没有扩展Connection的原因是为了让您可以进行更简单的PooledConnection实施使用任何其他现有的Connection实现,允许代码重用并保持功能分离。

答案 1 :(得分:2)

  

...因为PooledConnection总是一个连接。

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

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

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

(或者至少,这是我的理论。为了获得明确的答案,你需要问那些编写了引起这些接口的规范的人。)

答案 2 :(得分:1)

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

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

PooledConnection不能直接用作Connection,因此不会扩展Connection接口。