您可以通过调用以下方式访问未代理的工作连接:
public void execute(Connection connection) throws SQLException {
Connection unproxiedConnection = connection.unwrap( Connection.class );
...
}
这种形式利用了 JDBC 4 的 unwrap 方法,我们只是将它委托给底层连接。或者,如果您特别需要 OracleConnection:
public void execute(Connection connection) throws SQLException {
OracleConnection oracleConnection = connection.unwrap( OracleConnection.class );
...
}
您还可以使用:
public void execute(Connection connection) throws SQLException {
Connection unproxiedConnection = ( (JdbcWrapper<Connection>) connection ).getWrappedObject();
...
}
在考虑允许作品表示它想要一个未经代理的连接方面,我来回考虑,但考虑到 Connection#unwrap 的可用性,我不太确定是否有真正的好处。