浅学SpringBoot-aop

这篇博客详细解析了Spring AOP中的核心概念,包括Aspect(切面)、JointPoint(连接点)、PointCut(切入点)和Advice(通知)。切面是横切关注点的抽象,用于封装通用业务逻辑;连接点是程序执行的特定点,如方法调用;切入点定义了哪些连接点会被拦截;通知则是在特定切入点执行的增强处理,包括前置、后置、异常、最终和环绕通知。示例代码展示了如何定义和使用这些概念。
摘要由CSDN通过智能技术生成

今天就别人写的代码重新理解一下 spring 的aop 。
以下为自己的理解和网上的一些来源,不保证绝对正确,若有错误欢迎指正

https://gitee.com/yidao620/springboot-bucket?_from=gitee_search

在这里插入图片描述

Aspect 切面
切面是散落在系统各处通用的业务逻辑代码,如日志模块、权限模块、事务模块等。

切面用来装载切入点PointCut和通知Advice

切面通常是一个类,可以定义切入点和通知。类是对物体特征的抽象,切面是对横切关注点的抽象。

切面是业务流程运行的某个特定步骤,是应用运行过程中的关注点,关注点通常会横切多个对象,因此也被称为横切关注点。

JointPoint 连接点
连接点是程序执行过程中明确的点,一般是类中方法的调用。连接点是程序在运行过程中能够插入切面的地点,比如方法调用、异常抛出、字段修改等。

PointCut 切入点
切入点是带有通知的连接点,在程序中主要体现为编写切入点表达式。切入点是对连接点进行拦截的定义。切入点用于定义通知应该切入到哪些连接点上,不同的通知需要切入到不同的连接点上,这种精准的匹配是由切入点的正则表达式来定义的。

切入点是可以插入增强处理的连接点,当某个连接点满足执行要求时,该连接点将被连接增强处理,该连接点也就变成了切入点。

切入点是拦截的方法,连接点JointPoint拦截后将变成切入点。

/**
 * 日志切面
 */
@Aspect
@Component
public class LogAspect {
    @Pointcut("execution(public * com.xncoding.aop.controller.*.*(..))")
    public void webLog(){}
    }

LogAspect装载切入点PointCut和通知Advice,定义了切入点和通知,比如日志切面 ,包含了切入点webLog带有通知的连接点,是拦截的方法,是由连接点JointPoint拦截后变成切入点。

Advice 通知
通知是AOP在特定切入点上执行的增强处理,是拦截到连接点之后要执行的代码,通知可以分为前置通知Before、后置通知AfterReturning、异常通知AfterThrowing、最终通知After、环绕通知Around五类。

 @Before("webLog()")
    public void deBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 记录下请求内容
        System.out.println("URL : " + request.getRequestURL().toString());
        System.out.println("HTTP_METHOD : " + request.getMethod());
        System.out.println("IP : " + request.getRemoteAddr());
        System.out.println("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        System.out.println("ARGS : " + Arrays.toString(joinPoint.getArgs()));

    }

    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
        // 处理完请求,返回内容
        System.out.println("方法的返回值 : " + ret);
    }

    //后置异常通知
    @AfterThrowing("webLog()")
    public void throwss(JoinPoint jp){
        System.out.println("方法异常时执行.....");
    }

    //后置最终通知,final增强,不管是抛出异常或者正常退出都会执行
    @After("webLog()")
    public void after(JoinPoint jp){
        System.out.println("方法最后执行.....");
    }

    //环绕通知,环绕增强,相当于MethodInterceptor
    @Around("webLog()")
    public Object arround(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("方法环绕start.....");
        try {
            Object o =  pjp.proceed();
            System.out.println("方法环绕proceed,结果是 :" + o);
            return o;
        } catch (Throwable e) {
            throw e;
        }
    }

通知顺序
在这里插入图片描述

问题:java.lang.IllegalStateException: Cannot load configuration class: com.xncoding.pos.Application
回答:修改jdk为1.8

参考:

链接1:https://www.jianshu.com/p/f1770b9dce27

链接2:https://blog.csdn.net/weixin_45727359/article/details/123606337

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cross-Attention指的是Transformer架构中的一种注意力机制,它用于混合两个不同嵌入序列的注意力。这两个序列必须具有相同的维度,并且可以是不同的模式形态,比如文本、声音、图像等。在Cross-Attention中,一个序列作为输入的Q,定义了输出的序列长度,而另一个序列提供输入的K和V。 Cross-Attention与Self-Attention不同之处在于,Cross-Attention的输入来自不同的序列,而Self-Attention的输入来自同一个序列。但除此之外,它们的基本原理是一致的。在Transformer中,Cross-Attention通常是指编码器和解码器之间的交叉注意力层。在这一层中,解码器会对编码器的输出进行注意力调整,以获得与当前解码位置相关的编码器信息。具体的计算过程包括:编码器输入(通常是来自编码器的输出)和解码器输入(已生成的部分序列)被分别表示为enc_inputs和dec_inputs。解码器的每个位置会生成一个查询向量(query),用来在编码器的所有位置进行注意力权重计算。编码器的所有位置会生成一组键向量(keys)和值向量(values)。通过对查询向量和键向量进行点积操作,并通过softmax函数获得注意力权重。注意力权重与值向量相乘,并对结果进行求和,得到编码器调整的输出。这样,Cross-Attention机制帮助解码器能够有效地建模当前生成位置的上下文信息。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【科研】浅学Cross-attention?](https://blog.csdn.net/MengYa_Dream/article/details/126688503)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [交叉注意力机制CrossAttention](https://blog.csdn.net/m0_63097763/article/details/132293568)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值