JFinal aop事务 RegTxInterceptor示例
JFinal aop事务 RegTxInterceptor示例
绝望的八皮 发表于6年前
JFinal aop事务 RegTxInterceptor示例
  • 发表于 6年前
  • 阅读 391
  • 收藏 3
  • 点赞 1
  • 评论 1

【腾讯云】新注册用户域名抢购1元起>>>   

声明事务或者编程事务让代码太分散了,使用aop方式的事务更容易维护一点,稍微写了个示例给大家提供个思路,作者说下个版本(目前是1.0.8)将会加入类似的支持。 

  在你的JFinalConfig中注册。

public void configInterceptor(Interceptors me) {

me.add(new RegTxInterceptor("正则表达式"));

}

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.sql.SQLException;
import java.util.regex.Pattern;

import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.IAtom;

public class RegTxInterceptor implements Interceptor {
	private String regex;

	public RegTxInterceptor(String regex) {
		this.regex = regex;
	}

	public void intercept(final ActionInvocation ai) {

		if (!Pattern.compile(regex).matcher(express(ai)).matches()) {
			ai.invoke();
		}
		Db.tx(new IAtom() {
			public boolean run() throws SQLException {
				try {
					ai.invoke();
				} catch (Exception e) {
					e.printStackTrace();
					return false;
				}
				return true;
			}
		});

	}

	private String express(ActionInvocation ai) {
		Class clazz = ai.getController().getClass();
		Method method = ai.getMethod();
		String className = clazz.getName();
		String modifierName = Modifier.toString(method.getModifiers());
		return modifierName + " " + className + "." + method.getName();
	}

	public String getReg() {
		return regex;
	}

	public void setReg(String reg) {
		this.regex = reg;
	}

}
标签: JFinal aop 事务
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
绝望的八皮
粉丝 387
博文 24
码字总数 10773
作品 2
评论 (1)
JFinal
JFinal下一版打算引入这个扩展,也是由于你那天在群里面提出的需求。再次感谢你提出这样好的需求。另外,你上面的代码可能有个 bug,第 21 行的 ai.invoke()后面应该加一个 return。最后建议第 20 行的compile提取出来,只需编译一次就可以了,提高性能 :)
×
绝望的八皮
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: