日期:2014-05-16 浏览次数:20424 次
?DbUtils组件的核心部分已经解析完了,实际上呢,DbUtils组件还有其它很多有用对JDBC的包装类,所以呢,在这篇博文里一一介绍:
? 1)DbUtils :JDBC辅助方法的集合类,它里面的方法全部是静态,实际上就是一针对JDBC的辅助操作集合类。该类的实现也是比较的简单的,比如JDBC驱动程序加载、JDBC各类接口连接的关闭等等。现在我抽取部分具有代表性的代码来进行解析:
?
/** * 关于数据连接实例Connection,如果Connection为空则不做任何操作 * @param conn 待关闭的Connection. * @throws SQLException 数据库访问异常 */ public static void close(Connection conn) throws SQLException { if (conn != null) { conn.close(); } } /** * 关于数据连接实例Connection,隐藏任何抛出的SQLException。 * 如果Connection为空则不做任何操作 * @param conn 待关闭的Connection. */ public static void closeQuietly(Connection conn) { try { close(conn); } catch (SQLException e) { // quiet } } /** * 加载注册数据驱动类. * 如果加载成功,则会返回true,否则返回false. * * @param driverClassName 加载的驱动类名 * @return boolean 如果驱动程序加载成功返回true,否则返回false. */ public static boolean loadDriver(String driverClassName) { try { Class.forName(driverClassName).newInstance(); return true; } catch (ClassNotFoundException e) { return false; } catch (IllegalAccessException e) { // Constructor is private, OK for DriverManager contract return true; } catch (InstantiationException e) { return false; } catch (Throwable e) { return false; } }
?? 看,传说中的关闭数据连接Connection,隐藏异常就是吞异常不捕获噢,哈哈哈~OK,DbUtils这个JDBC帮助类的解析到此为止。
? 2)ProxyFactory :创建JDBC接口的代理实现类。这个类避免了JDBC2和JDBC3接口之间的不兼容。记住,只是针对JDBC中的接口创建的代理哟。
?
/** * 创建一个新的Connection代理对象。 * @param handler 调用拦截/重载类的处理器 * @return 代理的ResultSet实例 */ public ResultSet createResultSet(InvocationHandler handler) { return newProxyInstance(ResultSet.class, handler); } /** * 使用处理类的加载器产生一个独立接口的代理类的便利方法 * @param <T> 需要代理的对象类型 * @param type 代理的对象类型 * @param handler 拦截/重写方法调用的处理程序 * @return proxied object */ public <T> T newProxyInstance(Class<T> type, InvocationHandler handler) { return type.cast(Proxy.newProxyInstance(handler.getClass().getClassLoader(), new Class<?>[] {type}, handler)); }
?? 这个类的关键了,就是newProxyInstance方法了,它有两个参数,第二个参数是InvocationHandler的实现类,它是指定代理对象类型的处理方式,首先调用Proxy.newProxyInstance()生成代理类,然后再调用Class类的cast()方法转换成代理类。由此实现不难看出,只针对JDBC的接口实现代理。
?
?
?
?