1. 程式人生 > >AOP 捕獲自定義異常

AOP 捕獲自定義異常

package com.gqc.aop05;

import org.springframework.aop.ThrowsAdvice;

//異常通知
public class MyThrowsAdvice implements ThrowsAdvice {
	// 當目標方法丟擲UsernameException異常時,執行當前方法
	public void afterThrowing(UserNameExcepiton ex) {
		System.out.println("發生使用者名稱異常 ex = " + ex.getMessage());
	}
	
	// 當目標方法丟擲PasswordException異常時,執行當前方法
	public void afterThrowing(PasswordException ex) {
		System.out.println("發生密碼異常 ex = " + ex.getMessage());
	}
	
	// 當目標方法丟擲其它異常時,執行當前方法
	public void afterThrowing(Exception ex) {
		System.out.println("發生異常 ex = " + ex.getMessage());
	}
	

}
package com.gqc.aop05;

import com.gqc.utils.SystemService;



//目標類
public class SomeServiceImpl implements ISomeService {

	@Override
	public boolean login(String username, String password) throws UserException {
		if(!("beijing".equals(username))){
			throw new UserNameExcepiton("使用者名稱輸錯了");
		}
		if(!"111".equals(password)){
			throw new PasswordException("密碼輸錯了");
		}
		return true;
	}


}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd">

		<!-- 註冊目標物件 -->
		<bean id="someService" class="com.gqc.aop05.SomeServiceImpl"/>
	
		<!-- 註冊切面:後置通知 -->
		<bean id="myAdvice" class="com.gqc.aop05.MyThrowsAdvice"/>
		
		<!-- 生成代理物件 -->
		<bean id="serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
			<!-- 指定目標物件 -->
			<property name="target" ref="someService"/>
			<!-- <property name="targetName" value="someService"/> -->
			<!-- 指定切面 -->
			<property name="interceptorNames" value="myAdvice"/>
		</bean>
				
</beans>

package com.gqc.aop05;

//異常分兩種
//1)執行時異常 不進行處理也可以編譯通過
	//若一個類繼承RunntimeException 則該異常就是執行時異常
//1)編譯時異常(受查異常 Checked Exception) 不進行處理將無法通過編譯
	//若一個類繼承Exception 則該異常就是受查異常
public class UserException extends Exception {

	public UserException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public UserException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}
	
}