JFinal aop事务 RegTxInterceptor示例

声明事务或者编程事务让代码太分散了,使用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;
	}

}

你可能感兴趣的:(AOP,事务,jFinal)