`
xiaoZ5919
  • 浏览: 400240 次
  • 性别: Icon_minigender_1
  • 来自: 安平人@北京
博客专栏
Group-logo
Netty学习笔记
浏览量:72746
社区版块
存档分类
最新评论

JdbcTemplate的callback

阅读更多

    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实现的

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics