根据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方法时,无需执行任何操作。

10-05 21:52