Dao拦截器
By:wendal<wendal1985@gmail.com>

为啥要实现Dao拦截器

Top

内置的拦截器实现

Top

如何自定义

需要实现的接口

public interface DaoInterceptor {
    void filter(DaoInterceptorChain chain) throws DaoException;
}
// DaoInterceptorChain 包含当前执行的全部信息,如Connection,DaoStatment等等

示例实现

public class MyDaoInterceptor implements DaoInterceptor {
    public void filter(DaoInterceptorChain chain) throws DaoException {
        DaoStatement st = chain.getDaoStatement();
        if (st instanceof NutPojo) {
            // 如果是dao.insert(user)之类的操作,会进入这个分支
        } else if (st instanceof NutSql) {
        	// 如果是自定义SQL,会进入这个分支
        }
        chain.doChain();//继续下一个拦截器执行
    }
}

在ioc中的配置,以dao.js为例

var ioc = {
		dao : {
			type : "org.nutz.dao.impl.NutDao",
			args : [{refer:"dataSource"}],
			fields : {
				interceptors : [
							"log", // 默认的日志还需要的
							"time", // 加个时间又如何呢?
							"net.demo.MyDaoInterceptor", // 加入自己的,才合适
							{refer:"superI"} // 引用另外一个bean作为拦截器
							]
			}
		}
}