AOP概述
AOP(面向方面编程)是一种编程范式,一般是用与具有横切逻辑的场合,如访问控制、事务管理、性能检测等,旨在通过允许横切关注点的分离,提高模块化。
我们可以把横向的function提取到一个地方去,在我们使用的时候我们把它植入到相应的类中去执行。
方便代码的修改,编写业务逻辑时可以专心于核心业务。
AOP术语
- 切面
- 连接点
- 切入点
- 通知/增强处理
- 目标对象
- 代理对象
- 织入
面向切面编程主要关乎两个问题,即在什么位置执行什么功能。
基于XML配置文件的AOP实现
使用AOP框架时,开发者需要做的主要工作是定义切入点和通知,通常采用XML配置文件或注解的方式,配置好切入点和增强处理的信息后,AOP框架会自动生成AOP代理。
前置通知
D:eclipse/spring-5
添加jar包
joinPoint.getArgs可以获得browse的两个参数
返回通知
返回通知是指在连接点正常执行后实施增强,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
实例
在上一个项目中做补充
其余不变,运行结果:
异常通知
异常通知在连接点抛出异常后执行
实例
没异常,先整出来个异常
环绕通知
环绕通知是围绕在连接点前后,比如一个方法调用的前后,是最强大的通知类型,在方法调用前后自定义操作。环绕通知还需要负责决定是继续处理joinpoint(调用 ProceedingJoinPoint的proceed方法还是中断执行,
实例
基于@AspectJ注解的AOP实现
基于XML配置文件的AOP实现免不了在Spring配置文件中配置大量的信息,不仅配置麻烦,而且造成配置文件的臃肿。AspectJ框架为AOP的实现提供了一套注解,用以取代Spring配置文件中为实现AOP功能所配置的臃肿代码。
关于AspectJ注解的说明如下
- @Aspect:用于定义一个切面
- @Pointcut:用于定义一个切入点
- @Before:用于定义一个前置通知,相当于BeforeAdevice
- @AfterReturning:用于定义一个后置通知,相当于AfterReturningAdvice.
- @AfterThrowing:用于定义一个异常通知,相当于ThrowAdvice
- @Around:用于定义一个环绕通知,相当于MethodInterceptor
- @After:用于定义最终final通知,不管是否异常,该通知都会执行
实例