@Override
public void execute(final String sql) throws DataAccessException {
if (logger.isDebugEnabled()) {
logger.debug("Executing SQL statement [" + sql + "]");
}
class ExecuteStatementCallback implements StatementCallback<Object>, SqlProvider {
@Override
public Object doInStatement(Statement stmt) throws SQLException {
stmt.execute(sql);
return null;
}
@Override
public String getSql() {
return sql;
}
}
execute(new ExecuteStatementCallback());
}
以上这段代码来自JdbcTemplate
的代码,请问为什么要在execute
方法内定义类ExecuteStatementCallback
呢?这样做有什么好处?
这样做只是一种良好的封装吧. 首先 ExecuteStatementCallback 主要作为一个回调, 它本身的代码量比较小, 如果作为单独的一个类的话, 对工程管理来说也不太合适; 第二, 因为这样的回调类和业务代码的关联很大, 并且通常是只在一个地方使用, 因此可以在方法中定义这样的类, 进而可以实现良好的封装.
一般这样的情况下, 就如上面朋友所说的, 使用匿名的内部类比较好, 这样代码会更加简洁一些.