package org.theonefx.wcframework.aop; import org.theonefx.aopaloance.intercept.MethodInterceptor; import org.theonefx.wcframework.aop.exception.AopInvocationException; /** * @File : InterceptorChain.java * @ClassName : InterceptorChain * @Author : TheoneFx * @Date : 2013-2-26 下午02:44:45 * @Version : v1.0 * @Description : 拦截器链 */ public class InterceptorChain { private MethodInterceptor[] interceptors; private int size = 0; public void add(MethodInterceptor interceprot) { if (interceprot == null) { return; } if (size == 0) { interceptors = new MethodInterceptor[6]; } if (size == interceptors.length) { MethodInterceptor[] temp = interceptors; interceptors = new MethodInterceptor[size + 6]; System.arraycopy(temp, 0, interceptors, 0, size); } interceptors[size] = interceprot; size++; } public void add(MethodInterceptor[] interceprotArray) { if (interceprotArray != null && interceprotArray.length > 0) { for (int i = 0; i < interceprotArray.length; i++) { add(interceprotArray[i]); } } } public MethodInterceptor get(int i) { if (i >= size) { throw new AopInvocationException("索引超出范围,索引号:" + i + ",chain大小:" + size); } return interceptors[i]; } public int getSize() { return size; } public void setInterceptors(MethodInterceptor[] interceptors) { this.interceptors = interceptors; size = interceptors != null ? interceptors.length : 0; } }