亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? throwsadviceinterceptor.java

?? spring framework 2.5.4源代碼
?? JAVA
字號:
/*
 * Copyright 2002-2007 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.aop.framework.adapter;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.aop.AfterAdvice;
import org.springframework.util.Assert;

/**
 * Interceptor to wrap an after-throwing advice.
 *
 * <p>The signatures on handler methods on the <code>ThrowsAdvice</code>
 * implementation method argument must be of the form:<br>
 *
 * <code>void afterThrowing([Method, args, target], ThrowableSubclass);</code>
 *
 * <p>Only the last argument is required.
 *
 * <p>Some examples of valid methods would be:
 *
 * <pre class="code">public void afterThrowing(Exception ex)</pre>
 * <pre class="code">public void afterThrowing(RemoteException)</pre>
 * <pre class="code">public void afterThrowing(Method method, Object[] args, Object target, Exception ex)</pre>
 * <pre class="code">public void afterThrowing(Method method, Object[] args, Object target, ServletException ex)</pre>
 *
 * <p>This is a framework class that need not be used directly by Spring users.
 *
 * @author Rod Johnson
 * @author Juergen Hoeller
 */
public class ThrowsAdviceInterceptor implements MethodInterceptor, AfterAdvice {

	private static final String AFTER_THROWING = "afterThrowing";

	private static final Log logger = LogFactory.getLog(ThrowsAdviceInterceptor.class);


	private final Object throwsAdvice;

	/** Methods on throws advice, keyed by exception class */
	private final Map exceptionHandlerMap = new HashMap();


	/**
	 * Create a new ThrowsAdviceInterceptor for the given ThrowsAdvice.
	 * @param throwsAdvice the advice object that defines the exception
	 * handler methods (usually a {@link org.springframework.aop.ThrowsAdvice}
	 * implementation)
	 */
	public ThrowsAdviceInterceptor(Object throwsAdvice) {
		Assert.notNull(throwsAdvice, "Advice must not be null");
		this.throwsAdvice = throwsAdvice;

		Method[] methods = throwsAdvice.getClass().getMethods();
		for (int i = 0; i < methods.length; i++) {
			Method method = methods[i];
			if (method.getName().equals(AFTER_THROWING) &&
					//m.getReturnType() == null &&
					(method.getParameterTypes().length == 1 || method.getParameterTypes().length == 4) &&
					Throwable.class.isAssignableFrom(method.getParameterTypes()[method.getParameterTypes().length - 1])
				) {
				// Have an exception handler
				this.exceptionHandlerMap.put(method.getParameterTypes()[method.getParameterTypes().length - 1], method);
				if (logger.isDebugEnabled()) {
					logger.debug("Found exception handler method: " + method);
				}
			}
		}
		
		if (this.exceptionHandlerMap.isEmpty()) {
			throw new IllegalArgumentException(
					"At least one handler method must be found in class [" + throwsAdvice.getClass() + "]");
		}
	}
	
	public int getHandlerMethodCount() {
		return this.exceptionHandlerMap.size();
	}

	/**
	 * Determine the exception handle method. Can return null if not found.
	 * @param exception the exception thrown
	 * @return a handler for the given exception type
	 */
	private Method getExceptionHandler(Throwable exception) {
		Class exceptionClass = exception.getClass();
		if (logger.isTraceEnabled()) {
			logger.trace("Trying to find handler for exception of type [" + exceptionClass.getName() + "]");
		}
		Method handler = (Method) this.exceptionHandlerMap.get(exceptionClass);
		while (handler == null && !exceptionClass.equals(Throwable.class)) {
			exceptionClass = exceptionClass.getSuperclass();
			handler = (Method) this.exceptionHandlerMap.get(exceptionClass);
		}
		if (handler != null && logger.isDebugEnabled()) {
			logger.debug("Found handler for exception of type [" + exceptionClass.getName() + "]: " + handler);
		}
		return handler;
	}

	public Object invoke(MethodInvocation mi) throws Throwable {
		try {
			return mi.proceed();
		}
		catch (Throwable ex) {
			Method handlerMethod = getExceptionHandler(ex);
			if (handlerMethod != null) {
				invokeHandlerMethod(mi, ex, handlerMethod);
			}
			throw ex;
		}
	}
	
	private void invokeHandlerMethod(MethodInvocation mi, Throwable ex, Method method) throws Throwable {
		Object[] handlerArgs;
		if (method.getParameterTypes().length == 1) {
			handlerArgs = new Object[] { ex };
		}
		else {
			handlerArgs = new Object[] {mi.getMethod(), mi.getArguments(), mi.getThis(), ex};
		}
		try {
			method.invoke(this.throwsAdvice, handlerArgs);
		}
		catch (InvocationTargetException targetEx) {
			throw targetEx.getTargetException();
		}
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区不卡| 天堂影院一区二区| 国产欧美日韩精品在线| 久久亚洲一区二区三区明星换脸| 欧美一区二区三区影视| 91精品国产一区二区三区香蕉| 欧美日韩视频专区在线播放| 欧美日韩精品一区二区三区| 欧美日韩高清在线| 欧美一区二区三区的| 在线观看视频一区二区| 欧美色视频一区| 69av一区二区三区| 日韩你懂的电影在线观看| 欧美mv和日韩mv国产网站| 91丨porny丨最新| 国产在线精品国自产拍免费| 午夜伦理一区二区| 蜜桃av一区二区在线观看| 一区二区三区四区五区视频在线观看| 国产人伦精品一区二区| 在线综合+亚洲+欧美中文字幕| 91色乱码一区二区三区| 色狠狠色狠狠综合| av电影在线观看一区| 欧美电影免费观看高清完整版| 亚洲视频资源在线| 国产成人亚洲综合a∨婷婷| 4hu四虎永久在线影院成人| 精品国产制服丝袜高跟| 一区二区三区在线影院| 亚洲精品视频在线| 国产东北露脸精品视频| 3d动漫精品啪啪一区二区竹菊 | 欧美专区亚洲专区| 精品国产成人系列| 奇米综合一区二区三区精品视频| 91免费观看在线| 国产精品天美传媒| 国产精品主播直播| 精品美女一区二区| 亚洲国产精品精华液网站| eeuss鲁一区二区三区| 国产日韩影视精品| 国产伦精品一区二区三区免费迷 | 国产剧情一区二区| 欧美岛国在线观看| 亚洲欧美另类久久久精品| 亚洲国产精品影院| 成人av网址在线| 欧美亚洲一区三区| 欧美va在线播放| 亚洲免费成人av| 国产精品福利一区| 久久综合中文字幕| 亚洲欧美日韩一区二区三区在线观看| 亚洲v日本v欧美v久久精品| 色悠悠亚洲一区二区| 日韩午夜中文字幕| 亚洲精品第1页| 精品一区二区三区的国产在线播放 | 在线看国产一区二区| 欧美成人女星排名| 亚洲美女一区二区三区| 国产精品99久久久久久宅男| 欧美又粗又大又爽| 欧美国产一区在线| 奇米影视在线99精品| 欧洲国产伦久久久久久久| 26uuu亚洲综合色欧美 | 国产一区二区日韩精品| 欧美三级乱人伦电影| 国产欧美日韩亚州综合| 美腿丝袜亚洲一区| 色婷婷av一区二区三区gif| 久久免费精品国产久精品久久久久| 日韩美女视频一区| 国产一区福利在线| 欧美日韩一区二区在线视频| 精品久久久久久无| 色哟哟一区二区| 亚洲人123区| av网站免费线看精品| 亚洲国产精品精华液ab| 欧洲视频一区二区| 国产一区在线观看视频| 精品福利一区二区三区免费视频| 三级久久三级久久| 欧美本精品男人aⅴ天堂| 青娱乐精品在线视频| 成人免费视频视频| 欧美日韩国产成人在线免费| 中文字幕一区二区三区视频| 国产成+人+日韩+欧美+亚洲| 精品国产乱码久久| 久久国产精品一区二区| 日韩午夜小视频| 蜜臀va亚洲va欧美va天堂| eeuss国产一区二区三区| 中文字幕国产精品一区二区| a亚洲天堂av| 亚洲123区在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 精品在线播放午夜| 中文字幕中文在线不卡住| 欧美色男人天堂| 另类小说色综合网站| 国产视频视频一区| 91久久国产最好的精华液| 免费成人你懂的| 最好看的中文字幕久久| 欧美精品1区2区3区| 成人性色生活片免费看爆迷你毛片| 中文字幕一区二区三区在线播放 | 一本久久综合亚洲鲁鲁五月天| 久久综合色天天久久综合图片| 国产精品一区二区久久精品爱涩| 日韩精品午夜视频| 国产精品系列在线观看| 欧美午夜免费电影| 亚洲午夜影视影院在线观看| 色噜噜狠狠成人网p站| 一区二区三区四区五区视频在线观看| 色天天综合久久久久综合片| 一区二区三区四区在线| 欧美高清视频一二三区| 久久国产视频网| 久久精品视频一区| 99久久伊人久久99| 亚洲成a人v欧美综合天堂| 欧美日韩国产综合一区二区三区| 青娱乐精品视频在线| 五月综合激情婷婷六月色窝| 亚洲日本欧美天堂| 亚洲一区二区五区| 中文字幕一区在线观看视频| 色婷婷精品大在线视频| 成人高清伦理免费影院在线观看| 精品亚洲免费视频| 成人高清免费观看| 日韩视频一区二区| 婷婷开心激情综合| 色老汉一区二区三区| 国产精品灌醉下药二区| 成人在线一区二区三区| 欧美激情中文字幕| 综合久久国产九一剧情麻豆| 日韩欧美一二三四区| 亚洲日本在线天堂| 91在线观看美女| 亚洲视频在线观看一区| 波多野结衣亚洲| 日韩一区中文字幕| eeuss国产一区二区三区| 中文字幕在线不卡一区 | 蜜桃视频在线观看一区| 这里只有精品免费| 欧美aaaaa成人免费观看视频| 91精品国产综合久久精品麻豆| 亚洲自拍偷拍九九九| 欧美日韩一区二区欧美激情| 午夜欧美2019年伦理| 欧美成人高清电影在线| 国产毛片精品国产一区二区三区| 国产视频在线观看一区二区三区| 国产精品一区二区免费不卡| 中文av字幕一区| 99精品热视频| 日韩精品五月天| 久久综合狠狠综合久久综合88| 成人成人成人在线视频| 亚洲影院久久精品| 在线播放欧美女士性生活| 国产日韩精品一区| 三级成人在线视频| 99国产精品久久久久| 日韩一级高清毛片| 国产精品乱人伦| 久久97超碰色| 国产农村妇女精品| 亚洲成人黄色小说| 久久精品国产在热久久| 一区二区三区鲁丝不卡| 国产欧美一区二区精品性| 欧美一级高清大全免费观看| 在线观看av不卡| 99麻豆久久久国产精品免费| 国产一区二区在线观看免费 | 另类小说图片综合网| 午夜精品久久久久久久蜜桃app| 日韩毛片一二三区| 国产精品女人毛片| 国产亚洲人成网站| 欧美成人精品福利| 日韩一级欧美一级| 3d成人h动漫网站入口| 欧美视频日韩视频在线观看| 一本到不卡精品视频在线观看 | 欧美一区二区三区视频在线| 欧美日本在线一区|