JdbcTemplate的callback

tianshilang發表於2009-02-25

    JdbcTemplate的CallBack回撥機制很巧妙,算是aop的一種實現吧

    使用JdbcTemplate省掉了我們開啟和關閉connection的操作,同時需要一提的是在CallBack介面實現類的Connection處於auto-commit狀態,在CallBack的實現方法不能進行事物管理。

    execute程式碼

    

public Object execute(ConnectionCallback action) throws DataAccessException {
		Assert.notNull(action, "Callback object must not be null");

		Connection con = DataSourceUtils.getConnection(getDataSource());
		try {
			Connection conToUse = con;
			if (this.nativeJdbcExtractor != null) {
				// Extract native JDBC Connection, castable to OracleConnection or the like.
				conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
			}
			else {
				// Create close-suppressing Connection proxy, also preparing returned Statements.
				conToUse = createConnectionProxy(con);
			}
			return action.doInConnection(conToUse);
		}
		catch (SQLException ex) {
			// Release Connection early, to avoid potential connection pool deadlock
			// in the case when the exception translator hasn't been initialized yet.
			DataSourceUtils.releaseConnection(con, getDataSource());
			con = null;
			throw getExceptionTranslator().translate("ConnectionCallback", getSql(action), ex);
		}
		finally {
			DataSourceUtils.releaseConnection(con, getDataSource());
		}
	}

        CallBack是一個介面,其中定義了doInConnection(conn),把要寫的邏輯寫在此方法中。

我們只需要傳入一個conn即可,建立conn是前處理,關閉conn是後處理。 免去了這些繁瑣的操作。JdbcTemplate的其它方法也是利用CallBack實現的

相關文章