【学习笔记】【Java】Spring AOP

一、先看哔哩哔哩上的这个视频,过一下代码,有条件的按照写一个demo。

https://www.bilibili.com/video/BV1Vh4y1M7xk/?spm_id_from=333.337.search-card.all.click&vd_source=1eb6b3fe2775cd4bb115c4010e0e72ae

二、再看下面的这篇博客:

【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知Advice注解(已附源码)_@pointcut(@annotation)-CSDN博客

Spring中AOP注解@Aspect的使用详解_java_脚本之家

三、知识点梳理-AOP思想

 「面试话术-自选背诵-白话」任何一个系统都是由不同的组建组成的,每个组件负责一块特定的功能,当然会存在很多组件是跟业务无关的,例如日志、事务、权限等核心服务组件,这些核心服务组件经常融入到具体的业务逻辑中,如果我们为每一个业务逻辑操作都添加这样的代码,很明显冗余的代码太多,因此需要将这些公共的代码逻辑抽象出来变成一个切面,然后注入到目标对象(具体业务)中去,AOP正是基于这样的一个思路实现的,通过动态代理的方式,将需要注入切面的对象进行代理,在进行调用的时候,将公共逻辑直接添加进去,而不需要修改原有的业务的逻辑代码,只需要在原来的业务逻辑基础之上做一些增强功能即可。

「面试话术-自选背诵-专业」AOP(Aspect Oriented Programming)是一种面向切面的编程思想。面向切面编程是将程序抽象成各个切面,即解剖对象的内部,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理、增强处理。

AOP的使用场景

权限认证、日志、事务处理、增强处理

四、@Aspect的使用以及基本概念

1.切面类 @Aspect

切面(Aspect):AOP的核心就是切面,它将多个类的通用行为封装为可重用的模块。该模块含有一组API提供cross-cutting功能。例如,日志模块称为日志的AOP切面。根据需求的不同,一个应用程序可以有若干切面。在Spring AOP中,切面通过带有@Aspect注解的类实现。

定义切面类,加上@Aspect、@Component注解

@Aspect
@Component
//设置注解执行的顺序
@Order(2)
public class AnnotationAspectTest 

2.切点 @Pointcut

@Pointcut切点表达式非常丰富,可以将 方法(method)、类(class)、接口(interface)、包(package) 等作为切入点,非常灵活,常用的有@annotation、@within、execution等方式。

【常用1】切点指定包

/**
 * 定义切点,切点为对应controller
 */
@Pointcut("execution(public * com.example.zcs.Aop.controller.*.*(..))")
public void aopPointCut(){
}
注:execution表达式第一个*表示匹配任意的方法返回值,第二个*表示所有controller包下的类,第三个*表示所有方法,第一个..表示任意参数个数。

【常用2】切点指定注解 @annotation方式是指:切入点 是指定作用于方法上的注解,即被Spring扫描到方法上带有该注解 就会执行切面通知。

语法:@Pointcut(value = "@annotation(注解类名)")

    /**
     * 定义切点,切点为添加了注解的方法
     */
    @Pointcut("@annotation(com.example.zcs.Aop.annotation.TestAnnotation)")
    public void aopPointCut(){
    }

3.通知 Advice(5个注解)

通知(Advice)表示在方法执行前后需要执行的动作。实际上它是Spring AOP框架在程序执行过程中触发的一些代码。

Spring切面可以执行一下五种类型的通知:before(前置通知|注解):

4.JoinPoint :方法中的参数JoinPoint为连接点对象,它可以获取当前切入的方法的参数、代理类等信息,因此可以记录一些信息,验证一些信息等;

5.使用&&、||、!、三种运算符来组合切点表达式,表示与或非的关系;


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值