java @around,Spring AOP基于注解的Around通知

是一种建议类型,可确保方法执行前后的通知可以运行。 以下是通知的语法:

语法

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

在上面的语法示例中 –

– 将函数标记为切入点

execution( expression ) – 涵盖应用通知的方法的表达式。

– 将函数标记为在切入点覆盖的方法之前执行的通知。

要了解上面提到的通知相关的概念,我们写一个Spring AOP基于注解的应用例子,它将使用基于注解配置实现通知。打开并使用Eclipse IDE,并按照以下步骤创建一个Spring应用程序:

更新在中创建过的Student项目。

更新bean配置并运行应用程序,如下所述。

整个项目的目录结构如下所示 –

3616c9cfe2b190da1afde200c4ac92a6.png

下面是Logging.java文件的内容。 这实际上是一个Aspect模块的样本,它定义了在各个点被调用的方法。

package com.yiibai; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.ProceedingJoinPoint; @Aspect public 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.yiibai.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.yiibai; 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.yiibai; 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,并使用运行方式作为Java应用程序命令。 如果您的应用程序一切正常,这将打印以下消息:

[aroundAdvice]Around advice Age : 24 [aroundAdvice] Returning 24

¥ 我要打赏   纠错/补充 收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值