根据HikariCP的源代码,我发现作者通过javaassist生成HikariProxyConnection,但是该类除了调用超类方法之外什么都不做。
例如,HikariProxyConnection的超类是ProxyConnection:
public class HikariProxyConnection extends ProxyConnection implements AutoCloseable, Connection, Wrapper {
public Statement createStatement() throws SQLException {
try {
return super.createStatement();
} catch (SQLException var2) {
throw this.checkException(var2);
}
}
public PreparedStatement prepareStatement(String var1) throws SQLException {
try {
return super.prepareStatement(var1);
} catch (SQLException var3) {
throw this.checkException(var3);
}
} }
我发现ProxyConnection已经做了很多事情,HikariProxyConnection只为每个方法添加了一个try catch块。
如果有人能给出解释,那将是件好事。
在@brettwooldridge回答Hikari issue的目的有一个HikariProxyConnection
:
代理委托给真正的驱动程序类。某些代理(如ResultSet的代理)仅拦截一些方法。如果没有代码生成,代理必须实现所有50多个简单委托给包装实例的方法。
基于反射的代码生成还意味着当新的JDK版本向现有接口引入新的JDBC方法时,不需要做任何事情。