⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aophandler.java

📁 动态代理的代码例子
💻 JAVA
字号:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;

public class AOPHandler implements InvocationHandler {
	private List <Interceptor>interceptors = null;
	private Object originalObject;

	/**
	 * 返回动态代理实例
	 * 
	 * @param obj
	 * @return
	 */
	public Object bind(Object obj) {
		this.originalObject = obj;
		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
				.getClass().getInterfaces(), this);
	}

	/**
	 * 在Invoke方法中,加载对应的Interceptor,并进行
	 * 预处理(before)、后处理(after)以及异常处理(exceptionThrow)过程
	 */
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		Throwable ex = null;
		InvocationInfo invInfo = new InvocationInfo(proxy, method, args,
				result, ex);
		System.out.println("Invoking Before Intercetpors!");
		invokeInterceptorsBefore(invInfo);
		try {
			System.out.println("Invoking Proxy Method!");
			result = method.invoke(originalObject, args);
			invInfo.setResult(result);
			System.out.println("Invoking After Method!");
			invokeInterceptorsAfter(invInfo);
		} catch (Throwable tr) {
			invInfo.setException(tr);
			System.out.println("Invoking exceptionThrow Method!");
			invokeInterceptorsExceptionThrow(invInfo);
			throw new AOPRuntimeException(tr);
		}
		return result;
	}

	/**
	 * 加载Interceptor
	 * 
	 * @return
	 */
	private synchronized List <Interceptor>getIntercetors() {
		if (null == interceptors) {
			interceptors = new ArrayList<Interceptor>();
			//这里必须实现,不然没有数据,无法实现
			//1 TODO:读取配置,加载Interceptor实例
			// 2 interceptors.add(new MyInterceptor());
		}
		return interceptors;
	}

	/**
	 * 执行预处理方法
	 * 
	 * @param invInfo
	 */
	private void invokeInterceptorsBefore(InvocationInfo invInfo) {
		List <Interceptor>interceptors = getIntercetors();
		int len = interceptors.size();
		for (int i = 0; i < len; i++) {
			((Interceptor) interceptors.get(i)).before(invInfo);
		}
	}

	/**
	 * 执行后处理方法
	 * 
	 * @param invInfo
	 */
	private void invokeInterceptorsAfter(InvocationInfo invInfo) {
		List <Interceptor>interceptors = getIntercetors();
		int len = interceptors.size();
		for (int i = len - 1; i >= 0; i--) {
			interceptors.get(i).after(invInfo);
		}
	}

	/**
	 * 执行异常处理方法
	 * 
	 * @param invInfo
	 */
	private void invokeInterceptorsExceptionThrow(InvocationInfo invInfo) {
		List <Interceptor>interceptors = getIntercetors();
		int len = interceptors.size();
		for (int i = len - 1; i >= 0; i--) {
			 interceptors.get(i).exceptionThrow(invInfo);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -