package com.jarvis.cache.aop.cglib;
import net.sf.cglib.proxy.Callback;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.NoOp;
public class TableDAOFactory {
private static TableDao tDao=new TableDao();
public static TableDao getInstance() {
return tDao;
}
public static TableDao getAuthInstance(AuthProxy authProxy) {
Enhancer en=new Enhancer(); // Enhancer用来生成一个原有类的子类
// 进行代理
en.setSuperclass(TableDao.class);
// 设置织入逻辑
// en.setCallback(authProxy);
// en.setCallbacks()方法里的数组参数顺序就是上面方法的返回值所代表的方法拦截器,如果return 0则使用authProxy拦截器,
// return 1则使用NoOp.INSTANCE拦截器,NoOp.INSTANCE是默认的方法拦截器,不做什么处理。
en.setCallbacks(new Callback[]{authProxy, NoOp.INSTANCE}); // 设置两个方法拦截器
en.setCallbackFilter(new AuthProxyFilter());
// 生成代理实例
return (TableDao)en.create();
}
}