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

Spring AOP - 基于建议的注释

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

@Around 是一种建议类型,可确保在方法执行之前和之后运行建议.以下是@Around建议的语法.

语法

@PointCut("execution(* com) .it1352.Student.getAge(..))")private void selectGetName(){}@Around("selectGetAge()")public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint){   System.out.println("Around advice");   Object[] args = jp.getArgs();   if(args.length>0){      System.out.print("Arguments passed: " );      for (int i = 0; i < args.length; i++) {         System.out.print("arg "+(i+1)+": "+args[i]);      }   }   Object result = jp.proceed(args);   System.out.println("Returning " + result);   return result.toString();   }

其中,

  • @PointCut : 将函数标记为PointCut

  • 执行(表达式) : 表达式涵盖了应用建议的方法.

  • @Around : 将函数标记为在PointCut涵盖的方法之前执行的建议.

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

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

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

package com.it1352; import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.PointCut;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.ProceedingJoinPoint; @Aspectpublic class Logging {   /** Following is the definition for a PointCut to select    *  all the methods available. So advice will be called    *  for all the methods.    */   @PointCut("execution(* com.it1352.Student.getAge(..))")   private void selectGetAge(){}   /**     * This is the method which I would like to execute    * around a selected method execution.    */   @Around("selectGetAge()")   public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{      System.out.println("Around advice");      Object[] args = proceedingJoinPoint.getArgs();      if(args.length>0){         System.out.print("Arguments passed: " );         for (int i = 0; i < args.length; i++) {            System.out.print("arg "+(i+1)+": "+args[i]);         }      }      Object result = proceedingJoinPoint.proceed(args);      System.out.println("Returning " + result);   }  }

以下是 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.getAge();        }}

以下是配置文件 Beans.xml .

                                           

运行项目

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

Around adviceAge : 11Returning 11