![](/img/trans.png)
[英]Getting java.sql.connection from Spring jdbc : getJdbcTemplate()
[英]jdbc why isn't javax.sql.PooledConnection inherited from java.sql.Connection
每次我们实现PooledConnection时,我们都会编写
class MyConnection implements PooledConnection, Connection {
// implement methods of PooledConnection and Connection
}
我想知道为什么PooledConnection
不是设计为extends Connection
? 因为PooledConnection
总是一个Connection
。
我不确定,但我想PooledConnection
不扩展Connection
的原因是你可以使用一个非常简单的PooledConnection
实现,它使用任何其他现有的Connection
实现,允许代码重用并保持功能分离。
...因为PooledConnection总是一个连接。
实际上,这就是重点。 PooledConnection
接口设计允许 PooledConnection
实例成为Connection
实例的不同对象。
为什么要这么做? 在XA实现中,可能存在来自不同数据库供应商的许多不同的Connection
实现,而PooledConnection
类旨在处理其中的“东西”; 例如跨多个数据库的协调。 保持两个接口不同意味着XA实现不需要将XA级连接实现为包装器对象。
当然,由于PooledConnection
和Connection
接口 ,它们可以由相同的连接类实现......如果情况需要它。
(或者至少,这是我的理论。为了得到明确的答案,你需要问那些编写了引起这些接口的规范的人。)
PooledConnection
是物理连接的句柄 。 此物理连接对象可能是JDBC Connection
,但另一方面,它也可能是较低级别的特定于数据库的构造。
句柄是连接池用于创建逻辑Connection
-objects以分发给连接池的客户端(使用getConnection()
方法。当客户端关闭该连接时,会通知连接池PooledConnection
再次可用。
PooledConnection
不能直接用作Connection
,因此它不会扩展Connection接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.