为什么javaAPist生成HikariProxyConnection,因为作者已经编写了ProxyConnection?

问题描述 投票:1回答:1

根据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块。

如果有人能给出解释,那将是件好事。

java connection-pooling hikaricp javassist
1个回答
1
投票

在@brettwooldridge回答Hikari issue的目的有一个HikariProxyConnection

代理委托给真正的驱动程序类。某些代理(如ResultSet的代理)仅拦截一些方法。如果没有代码生成,代理必须实现所有50多个简单委托给包装实例的方法。

基于反射的代码生成还意味着当新的JDK版本向现有接口引入新的JDBC方法时,不需要做任何事情。

© www.soinside.com 2019 - 2024. All rights reserved.