package li.mvc.adapter; import java.lang.reflect.Method; import javax.servlet.ServletRequest; import li.aop.AopChain; import li.aop.AopFilter; import li.mvc.Context; /** * Action方法参数适配器的抽象基类 * * @author 明伟 */ public abstract class AbstractAdapter implements AopFilter { public void doFilter(AopChain chain) { ServletRequest request = Context.getRequest(); Method method = chain.getMethod(); Class<?>[] argTypes = method.getParameterTypes(); Object[] args = chain.getArgs(); for (int i = 0; i < argTypes.length; i++) { if (this.match(argTypes[i])) { try { args[i] = this.adapt(request, i); } catch (Exception e) { throw new RuntimeException(e); } } } chain.doFilter(); } /** * 是否由当前适配器适配 */ public Boolean match(Class<?> type) { return false; } /** * 适配参数 */ public abstract Object adapt(ServletRequest request, Integer argIndex) throws Exception; }