使用handler(TypePattern)切入点。语法:
pointcut <pointcut name>(<any values to be picked uo>) : handler(<class>) ;
handler(TypePattern)切入点只支持vbefore()形式的通知。这意味着不能使用像around()这样的通知来重写catch块的正常行为。
public aspect HandlerRecipe {
pointcut myExceptionHandlerPointcut() : handler(ServiceException);
before() : myExceptionHandlerPointcut() {
System.out.println("------------ Aspect Advice Logic --------------");
System.out.println("Signature: " + thisJoinPoint.getStaticPart().getSignature());
System.out.println("Source Line: " + thisJoinPoint.getStaticPart().getSourceLocation());
System.out.println("-----------------------------------------------");
}
}
public class ServiceException extends Exception {
/**
* Create a new ServiceException with the specified message.
* @param msg the detail message
*/
public ServiceException(String msg) {
super(msg);
}
/**
* Create a new ServiceException with the specified message
* and root cause.
* @param msg the detail message
* @param ex the root cause
*/
public ServiceException(String msg, Throwable ex) {
super(msg, ex);
}
}
public class ExceptionClass {
public void triggerMyException() throws ServiceException
{
ServiceException myException = new ServiceException("A service exception has occured");
System.out.println("About to throw a ServiceException");
throw myException;
}
/**
* @param args
*/
public static void main(String[] args) {
ExceptionClass myObject = new ExceptionClass();
try
{
myObject.triggerMyException();
} catch (ServiceException me)
{
System.out.println("A ServiceException has been caught");
}
}
}
运行结果:
About to throw a ServiceException
------------ Aspect Advice Logic --------------
Signature: catch(ServiceException)
Source Line: ExceptionClass.java:19
-----------------------------------------------
A ServiceException has been caught
获取抛出的异常
public aspect HandlerRecipe {
pointcut myExceptionHandlerPointcut(ServiceException exception) : handler(ServiceException) && args(exception);
before(ServiceException exception) : myExceptionHandlerPointcut(exception) {
System.out.println("------------ Aspect Advice Logic --------------");
System.out.println("Signature: " + thisJoinPoint.getStaticPart().getSignature());
System.out.println("Source Line: " + thisJoinPoint.getStaticPart().getSourceLocation());
System.out.println("Exception caught:");
exception.printStackTrace();
System.out.println("-----------------------------------------------");
}
}
posted on 2007-07-03 16:32
周锐 阅读(299)
评论(0) 编辑 收藏 所属分类:
AspectJ