欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

配置切入点表达式|| 前置通知、后置通知、异常通知、最终通知、环绕通知

发布时间:2025/4/16 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 配置切入点表达式|| 前置通知、后置通知、异常通知、最终通知、环绕通知 小编觉得挺不错的,现在分享给大家,帮大家做个参考.





 环绕通知




pom.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dym</groupId><artifactId>day03_eesy_04adviceType</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins></build><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency></dependencies></project>

IAccountService.java

package com.itheima.service;/*** 账户的业务层接口*/ public interface IAccountService {/*** 模拟保存账户*/void saveAccount();/*** 模拟更新账户* @param i*/void updateAccount(int i);/*** 删除账户* @return*/int deleteAccount(); }

AccountServiceImpl.java

package com.itheima.service.impl;import com.itheima.service.IAccountService;/*** 账户的业务层实现类*/ public class AccountServiceImpl implements IAccountService{@Overridepublic void saveAccount() {System.out.println("执行了保存"); // int i=1/0;}@Overridepublic void updateAccount(int i) {System.out.println("执行了更新"+i);}@Overridepublic int deleteAccount() {System.out.println("执行了删除");return 0;} }

Logger.java

package com.itheima.utils;import org.aspectj.lang.ProceedingJoinPoint;/*** 用于记录日志的工具类,它里面提供了公共的代码*/ public class Logger {/*** 前置通知*/public void beforePrintLog(){System.out.println("前置通知Logger类中的beforePrintLog方法开始记录日志了。。。");}/*** 后置通知*/public void afterReturningPrintLog(){System.out.println("后置通知Logger类中的afterReturningPrintLog方法开始记录日志了。。。");}/*** 异常通知*/public void afterThrowingPrintLog(){System.out.println("异常通知Logger类中的afterThrowingPrintLog方法开始记录日志了。。。");}/*** 最终通知*/public void afterPrintLog(){System.out.println("最终通知Logger类中的afterPrintLog方法开始记录日志了。。。");}public Object aroundPringLog(ProceedingJoinPoint pjp){Object rtValue = null;try{Object[] args = pjp.getArgs();//得到方法执行所需的参数System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。前置");rtValue = pjp.proceed(args);//明确调用业务层方法(切入点方法)System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。后置");return rtValue;}catch (Throwable t){System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。异常");throw new RuntimeException(t);}finally {System.out.println("Logger类中的aroundPringLog方法开始记录日志了。。。最终");}} }

bean.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 配置srping的Ioc,把service对象配置进来--><bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean><!-- 配置Logger类 --><bean id="logger" class="com.itheima.utils.Logger"></bean><!--配置AOP--><aop:config><aop:pointcut id="pt1" expression="execution(* com.itheima.service.impl.*.*(..))"></aop:pointcut><!--配置切面 --><aop:aspect id="logAdvice" ref="logger"><!--配置前置通知:在切入点方法执行之前执行--><!--<aop:before method="beforePrintLog" pointcut-ref="pt1" ></aop:before>--><!--&lt;!&ndash; 配置后置通知:在切入点方法正常执行之后值。它和异常通知永远只能执行一个--><!--<aop:after-returning method="afterReturningPrintLog" pointcut-ref="pt1"></aop:after-returning>--><!--配置异常通知:在切入点方法执行产生异常之后执行。它和后置通知永远只能执行一个--><!--<aop:after-throwing method="afterThrowingPrintLog" pointcut-ref="pt1"></aop:after-throwing>--><!--配置最终通知:无论切入点方法是否正常执行它都会在其后面执行--><!--<aop:after method="afterPrintLog" pointcut-ref="pt1"></aop:after>--><!-- 配置环绕通知 详细的注释请看Logger类中--><aop:around method="aroundPringLog" pointcut-ref="pt1"></aop:around></aop:aspect></aop:config></beans>

总结

以上是生活随笔为你收集整理的配置切入点表达式|| 前置通知、后置通知、异常通知、最终通知、环绕通知的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。