每次我们实现 PooledConnection 时,我们都会编写
class MyConnection implements PooledConnection, Connection {
// implement methods of PooledConnection and Connection
}
我想知道为什么PooledConnection不设计为extends Connection?因为毕竟aPooledConnection总是 a 。Connection
我不确定,但我想PooledConnection不扩展的原因Connection是您可以制作一个PooledConnection使用任何其他现有Connection实现的更简单的实现,允许代码重用并保持功能分离。
...因为 PooledConnection 毕竟总是一个 Connection 。
实际上,这就是重点。PooledConnection界面设计允许PooledConnection实例成为与实例不同的对象Connection。
为什么要这么做?那么在 XA 实现中,可能有Connection来自不同数据库供应商的许多不同实现,并且这些PooledConnection类旨在处理最重要的“东西”;例如跨多个数据库的事务协调。保持这两个接口不同意味着 XA 实现不需要将 XA 级连接实现为包装对象。
当然,既然PooledConnection和Connection 接口,它们可以由同一个连接类实现......如果情况需要的话。
(或者至少,这是我的理论。要获得明确的答案,您需要询问编写产生这些接口的规范的人。)
APooledConnection是物理连接的句柄。这个物理连接对象可能是一个 JDBC Connection,但另一方面它也可能是一个较低级别的特定于数据库的构造。
句柄是连接池用来创建逻辑Connection对象以分发给连接池的客户端(使用该getConnection()方法。当客户端关闭该连接时,连接池会被通知该连接PooledConnection再次可用。
APooledConnection不打算直接用作 a Connection,因此它不扩展 Connection 接口。