l POM.xml
<!-- 基于AspectJ的aop依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.0.7.RELEASE</version> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> |
l 编写通知(增强类,一个普通的类)
l 配置通知,将通知类交给spring IoC容器管理
l 配置AOP 切面
***切入点表达式的格式:
execution([修饰符] 返回值类型 包名.类名.方法名(参数))
** execution:必须要
** 修饰符:可省略
** 返回值类型:必须要,但是可以使用*通配符
** 包名 :
** 多级包之间使用.分割
** 包名可以使用*代替,多级包名可以使用多个*代替
** 如果想省略中间的包名可以使用 ..
** 类名
** 可以使用*代替
** 也可以写成*DaoImpl
** 方法名:
** 也可以使用*好代替
** 也可以写成add*
** 参数:
** 参数使用*代替
** 如果有多个参数,可以使用 ..代替
***通知类型(五种):前置通知、后置通知、最终通知、环绕通知、异常抛出通知。
***前置通知:
***执行时机:目标对象方法之前执行通知
***配置文件:<aop:before method="before" pointcut-ref="myPointcut"/>
***应用场景:方法开始时可以进行校验
***后置通知:
***执行时机:目标对象方法之后执行通知,有异常则不执行了
***配置文件:<aop:after-returning method="afterReturning" pointcut-ref="myPointcut"/>
***应用场景:可以修改方法的返回值
***最终通知:
***执行时机:目标对象方法之后执行通知,有没有异常都会执行
***配置文件:<aop:after method="after" pointcut-ref="myPointcut"/>
***应用场景:例如像释放资源
***环绕通知:
***执行时机:目标对象方法之前和之后都会执行。
***配置文件:<aop:around method="around" pointcut-ref="myPointcut"/>
***应用场景:事务、统计代码执行时机
***异常抛出通知:
***执行时机:在抛出异常后通知
***配置文件:<aop:after-throwing method=" afterThrowing " pointcut- ref="myPointcut"/>
***应用场景:包装异常
l 编写切面类(注意不是通知类,因为该类中可以指定切入点)
l 配置切面类
<context:component-scan base-package="com.kkb.spring"/>
l 开启AOP自动代理
@Around
作用:
把当前方法看成是环绕通知。属性:
value:
用于指定切入点表达式,还可以指定切入点表达式的引用。
***使用@PointCut注解在切面类中定义一个通用的切入点,其他通知可以引用该切入点
@Configuration
@ComponentScan(basePackages="com.kkb")
@EnableAspectJAutoProxy
public class SpringConfiguration {
}
原文:https://www.cnblogs.com/jingzhi-sksk/p/12864604.html