根据HikariCP的源代码,我发现作者通过javaassist生成了HikariProxyConnection,但是该类除了调用super类方法外什么也不做。
例如,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的目的:
代理委托给实际的驱动程序类。有些代理(例如ResultSet的代理)仅拦截一些方法。没有代码生成,代理将必须实现全部50多个方法,这些方法仅委托给包装的实例。
基于反射的代码生成还意味着,当新的JDK版本向现有接口引入新的JDBC方法时,无需执行任何操作。