如何将 NewProxyConnection 类型转换为 AS400JDBCConnection

Posted

技术标签:

【中文标题】如何将 NewProxyConnection 类型转换为 AS400JDBCConnection【英文标题】:how can I typecast NewProxyConnection into AS400JDBCConnection 【发布时间】:2011-09-05 08:00:45 【问题描述】:

我是 Spring 新手。我在 Spring 中使用 ComboPooledDataSource 进行连接池。 我正在使用 AS400 进行连接。 我的问题是,当我使用此连接并尝试对此进行类型转换时 AS400JDBCConnection as400Conn = (AS400JDBCConnection)conn; 它给出了 ClassCastCastException,因为 ComboPooledDataSource 返回的连接对象是 NewProxyConnection 类型的,我该如何将它类型转换为 AS400JDBCConnection。

【问题讨论】:

【参考方案1】:

您不应该投射到AS400JDBCConnection。所有相关方法都应该通过Connection 接口提供。

您要处理的不是实际的连接对象(AS400JDBCConnection),而是一个包裹在它周围并管理对原始连接对象的访问的代理对象。 Understanding AOP Proxies

中解释了不同的代理机制

更新响应 cmets:需要访问方法 AS400JDBCConnection.getServerJobIdentifier()。然后你将不得不切换到 CGLib 代理(解释为here)。

【讨论】:

亲爱的肖恩其实我想做这个 AS400JDBCConnection as400Conn = (AS400JDBCConnection)conn;字符串 serverJobIdentifier = as400Conn.getServerJobIdentifier();我必须将其类型转换为 AS400JDBCConnection 的主要原因【参考方案2】:

Spring 确实支持解开代理的 ComboPooledDataSource 对象。如果您使用的是 JdbcTemplate,则可以将 nativeJdbcExtractor 属性设置为适当的对象。因此,您可以检索本机 Connection 甚至任何派生对象(如 ResultSet)的任何地方都将是本机的。

NativeJdbcExtractor 接口的 JavaDoc 以获取支持的类列表。这可以帮助您决定哪种实现适合您的应用程序。

【讨论】:

以上是关于如何将 NewProxyConnection 类型转换为 AS400JDBCConnection的主要内容,如果未能解决你的问题,请参考以下文章

VB中如何将object类型转换为其他类型?

如何将IntPtr类型转为Image类型

如何将匿名类型作为参数传递?

如何将字符串文字类型定义为另一个字符串文字类型的子类型?

如何将DateTime类型转换成String类型

如何将int转换成double