AOP开发流程

时间:2023-02-11 17:56:51

一、导入并加载jar包

AOP

aopalliance-1.0.jar

aspectjweaver-1.6.9.jar

spring-aop-3.2.13.RELEASE.jar

Spring

spring-beans-3.2.13.RELEASE.jar

spring-context-3.2.13.RELEASE.jar

spring-core-3.2.13.RELEASE.jar

spring-expression-3.2.13.RELEASE.jar


事务

spring-tx-3.2.13.RELEASE.jar

JDBC

mysql-connector-java-8.0.18.jar


二、编写切面类的增强的方法

1、增强类型:

  • 前置增强 <aop:before ....> ,在目标方法执行之前执行
  • 后置增强 <aop :after retuming ....> ,在目标方法正常执行(没有抛出异常)后执行
  • 异常抛出 <aop:after-throwing>, 在目标方法抛出异常时执行
  • 最终增强 <aop : after ...> 在目标方法执行完毕后执行(不论是否抛出异常)
  • 环绕增强 <aop : around ...>,在目标方法执行前后都执行


三、在Spring的配置文件中注册


<!--声明一个日志切面类的对象(实例)-->

<bean id="loggerAspect" class="com.spring.aop.LoggerAspect"/>


<!--配置一个AOP,切面类-->

<aop:config>

<!--定义一个切入点,并命名,指定它将要切入的位置(连接点)-->

<aop:pointcut id="pointcut" expression="execution(public int add (com.spring.pojo.User))"/>

<!--引入切面类的实例-->

<aop:aspect ref="loggerAspect">

<!--声明一个前置增强,并指定增强方法和切入点(可重用)-->

<aop:before method="before" pointcut-ref="pointcut"/>

<!--声明一个最终增强,并指定增强方法和切入点:一次性-->

<aop:after method="after" pointcut="execution(public int add (com.spring.pojo.User))"/>

<!--声明后置增强-->

<aop:after-returning method="afterRetuning" pointcut-ref="pointcut" returning="obj"/>

<!--声明一个异常增强-->

<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut" throwing="e"/>

<!--声明一个环绕增强-->

<aop:around method="around" pointcut-ref="pointcut"/>

</aop:aspect>

</aop:config>


切入点表达式

public * 方法名(String) 匹配所有类型的返回值

public * 方法名(..) 匹配所有类型的返回值和参数

*.com.spring.service.userService.*(..) 匹配service.userService类中的所有方法

*.com.spring.service.*..*(..) 匹配service包中的所有类中的所有方法