jdbc为什么不';t javax.sql.PooledConnection继承自java.sql.Connection
每次实现PooledConnection时,我们都会编写jdbc为什么不';t javax.sql.PooledConnection继承自java.sql.Connection,java,jdbc,Java,Jdbc,每次实现PooledConnection时,我们都会编写 class MyConnection implements PooledConnection, Connection { // implement methods of PooledConnection and Connection } 我想知道为什么PooledConnection没有设计成extensedconnection?由于PooledConnection始终是连接 我一点也不确定,但我想PooledConnection
class MyConnection implements PooledConnection, Connection {
// implement methods of PooledConnection and Connection
}
我想知道为什么
PooledConnection
没有设计成extensedconnection
?由于PooledConnection
始终是连接
我一点也不确定,但我想PooledConnection
没有扩展Connection
的原因是,您可以使用任何其他现有的连接实现,使PooledConnection
实现简单得多,从而允许代码重用并保持功能分离
。。。因为PooledConnection始终是一个连接
事实上,这就是重点。PooledConnection
接口设计允许PooledConnection
实例成为与Connection
实例不同的对象
你为什么要那样做?在XA实现中,可能有许多来自不同数据库供应商的Connection
的不同实现,而PooledConnection
类被设计用来处理除此之外的“东西”;e、 g.跨多个数据库协调事务。保持两个接口的不同意味着XA实现不需要将XA级别的连接实现为包装对象
当然,由于PooledConnection
和Connection
接口,它们可以由相同的连接类实现。。。如果情况需要的话
(或者至少,这是我的理论。要得到明确的答案,你需要询问产生这些接口的规范的编写者。)PooledConnection
是物理连接的句柄。这个物理连接对象可能是一个JDBC连接
,但另一方面,它也可能是一个较低级别的特定于数据库的构造
句柄是连接池用来创建逻辑connection
-对象以分发给连接池的客户端(使用getConnection()
方法)的对象。当客户端关闭该连接时,连接池会被通知PooledConnection
再次可用
PooledConnection
不打算直接用作连接,因此它不扩展连接接口。经验表明,功能应该指定为接口,而不是通过扩展类。只需查看属性
作为一个很好的例子来说明为什么不可以(属性不是哈希映射)我不确定这是怎么回事;Connection
和PooledConnection
都不是类。假设我们有一个名为ConnectionImpl
的Connection的实现,我们仍然可以写:class MyConnection扩展了ConnectionImpl实现了PooledConnection
,对吗?你可以。但我相信如果让MyConnection
只实现PooledConnection
,然后在getConnection()中返回ConnectionImpl
的实例,则不需要这样做
method。因为如果您选择,您可以为许多不同的连接对象类型编写单个PooledConnection类。它允许您将现有连接写入到PooledConnection对象中。如果不是这样,则编写外部库来执行池将是一件痛苦的事,因为您必须重写每个连接类型连接方法包装一个实例并委托给另一个实例。噢,提到PooledConnection.getConnection方法很有意义。PooledConnection的javadoc提供了有用的信息。