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