CGLIB 实现拦截器

final NSConnectionFactory factory = (NSConnectionFactory) context.get(NSConst.DATASOURCEFACTORY_KEY);
Object[] arguments = new Object[]{KDataAccess.ORACLE, factory.getConnection(jndi), getUser(), sessionId, NConst.CURRENT_SCHEMA};
Class[] argumentTypes = new Class[arguments.length];
argumentTypes[0] = Integer.class;
argumentTypes[1] = Connection.class;
argumentTypes[2] = User.class;
argumentTypes[3] = String.class;
argumentTypes[4] = String.class;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(NDataAccess.class);
enhancer.setCallback(new NDataAccessProxy(titleDspId,getUser()));
NDataAccess proxy = (NDataAccess)enhancer.create(argumentTypes,arguments);
/**
* <pre>
* <strong>説明:</strong>
* DBアクセスローグ出力するためにDB代理用クラス.
* </pre>
*
* <pre>
* <strong>注意事項:</strong>
* </pre>
*
* <pre>
* <strong>使用例:</strong>
* </pre>
*
* @author $Author: 鄧 $
* @version $Revision: 1.1 $ $Date: 2010/10/18 07:08:52 $
*/
public final class NDataAccessProxy implements MethodInterceptor {

private String functionId;
private User user;

public NDataAccessProxy(String functionId, User user) {
this.functionId = functionId;
this.user = user;
}

/** ログ. */
protected static Logger log = Logger.getLogger(NDataAccessProxy.class);

public Object intercept(Object obj, Method method, Object[] param,
MethodProxy proxyMethod) throws Throwable {
boolean isFunction = false;
boolean isSqlFunction = false;
LoginUser loginUser ;
String dealer = "";
if (functionId.equals("TS018")) {
isFunction = true;
Pattern pattern = Pattern.compile("^(getRecord(s|Bfile)(Exe)?|getResultSetEx|executeUpdate(SameState)?Exe|prepareCallExe(RetStr)?)$");
Matcher m = pattern.matcher(method.getName());
if(m.find()) {
isSqlFunction = true;
loginUser = (LoginUser) user;
dealer = loginUser.getDealerResourceType() + "_"
+ loginUser.getDealerConnectionCode() + "_"
+ loginUser.getDealerConnectionType();
}
}
if (isFunction) {
if(isSqlFunction) {
log.info("[DB]\t[functionId:]" + functionId + "\t[dealer:]" + dealer
+ "\t[sql:]" + param[param.length-1] + "\t[begin]");
}
}
Object result = proxyMethod.invokeSuper(obj, param);
if (isFunction) {
if(isSqlFunction) {
log.info("[DB]\t[functionId:]" + functionId + "\t[dealer:]" + dealer
+ "\t[sql:]" + param[param.length-1] + "\t[end]");
}
}
return result;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值