开发手册 欢迎您!
软件开发者资料库

Spring AOP - 基于投注建议的注释

抛出建议后的Spring AOP注释 - 学习Spring AOP框架,从基本到高级概念,从简单和简单的步骤开始,包括概述,环境设置,核心概念,建议类型,实现,代理,自定义注释,基于XML的配置,应用, PointCut方法,建议之前,建议后,返回建议后,投掷建议后,围绕Aspect,基于注释的配置。

@AfterThrowing 是一种通知类型,可确保在方法抛出异常时运行通知.以下是@AfterThrowing建议的语法.

语法

@AfterThrowing(PointCut = "execution(* com.it1352.Student.*(..))",    throwing = "error")public void afterThrowingAdvice(JoinPoint jp, Throwable error){   System.out.println("Method Signature: "  + jp.getSignature());     System.out.println("Exception: "+error);  }

其中,

  • @AfterThrowing : 如果方法抛出异常,则将函数标记为在PointCut覆盖的方法之前执行的建议.

  • PointCut : 提供选择函数的表达式.

  • 执行(表达式) : 表达覆盖方法,适用于建议.

  • 投掷 : 要返回的例外的名称.

为了理解上述与@AfterThrowing建议相关的概念,让我们写一个例子,将实施@AfterThrowing建议.要编写我们的示例并提供一些建议,让我们使用一个可用的Eclipse IDE,并使用以下步骤创建一个Spring应用程序.

Step描述
1更新项目学生已创建在章节 Spring AOP  - 应用程序.
2更新bean配置并运行应用程序,如下所述.

以下是 Logging.java 文件的内容.这实际上是方面模块的一个示例,它定义了在不同点调用的方法.

package com.it1352; import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.JoinPoint;  import org.aspectj.lang.annotation.AfterThrowing;  @Aspectpublic class Logging {   /**     * This is the method which I would like to execute    * after a selected method execution throws exception.    */   @AfterThrowing(PointCut = "execution(* com.IT屋.Student.*(..))",       throwing = "error")   public void afterThrowingAdvice(JoinPoint jp, Throwable error){      System.out.println("Method Signature: "  + jp.getSignature());        System.out.println("Exception: "+error);     }}

以下是 Student.java 文件的内容.

package com.it1352; public class Student {   private Integer age;   private String name;   public void setAge(Integer age) {      this.age = age;   }      public Integer getAge() {      System.out.println("Age : " + age );      return age;   }   public void setName(String name) {      this.name = name;   }      public String getName() {      System.out.println("Name : " + name );      return name;   }      public void printThrowException(){      System.out.println("Exception raised");      throw new IllegalArgumentException();   }}

以下是 MainApp.java 文件的内容.

package com.it1352; import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {   public static void main(String[] args) {      ApplicationContext context =          new ClassPathXmlApplicationContext("Beans.xml");      Student student = (Student) context.getBean("student");      student.printThrowException();        }}

以下是配置文件 Beans.xml .

                                           

运行项目

完成源文件和配置文件的创建后,运行您的应用程序.右键单击应用程序中的MainApp.java,然后使用 run as Java Application 命令.如果您的应用程序一切正常,它将打印以下消息.

Exception raisedMethod Signature: void com.it1352.Student.printThrowException()Exception: java.lang.IllegalArgumentExceptionException in thread "main" java.lang.IllegalArgumentException      at com.it1352.Student.printThrowException(Student.java:25)      at com.it1352.Student$$FastClassBySpringCGLIB$$7dc55815.invoke()      at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)      at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717)      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)      at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:58)      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)      at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)      at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)      at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)      at com.it1352.Student$$EnhancerBySpringCGLIB$$99b0a988.printThrowException()      at com.it1352.MainApp.main(MainApp.java:13)