Spring------SpringAOP的@Aspect注解不起作用的问题

【特殊情况】SpringBoot的@Aspect注解不起作用的问题 关于SpringBoot踩的坑。 阅读详情

在学习用SpringBoot时用注解的方式配置SpringAOP发现并没有起到作用,最后在网上找到了问题所在,在此记录一下。

参考自:https://stackoverflow.com/questions/9633840/spring-autowired-bean-for-aspect-aspect-is-null/11445798#11445798

 这是项目的目录结构:

 LogAspect.java

package com.vmars.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class LogAspect {
    private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);

    @Before(value = "execution(* com.vmars.controller.IndexController.*(..))")
    public void beforeMethod(JoinPoint joinPoint) {

        StringBuilder sb = new StringBuilder();
        for (Object arg : joinPoint.getArgs()) {
            sb.append("arg: " + arg.toString() + " | ");
        }

        logger.info("Before Method : " + sb.toString());
    }

    @After(value = "execution(* com.vmars.controller.IndexController.*(..))")
    public void afterMethod(JoinPoint joinPoint) {
        logger.info("After Method.");
    }
}

IndexControl.java

package com.vmars.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

@Controller
public class IndexController {

    private static final Logger logger = LoggerFactory.getLogger(IndexController.class);


    @RequestMapping(path = {"/"})
    @ResponseBody
    public String index() {

        logger.info("Visit Index Page");

        return "Hello vMars";
    }

}

1.首先排查自己的pom.xml,观察是不是把所对应需要的包都导进去了。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.vmars</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <!-- 以下是 SpringAOP 所需要的包 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.14.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <!-- 以上是 SpringAOP 所需要的包 -->




        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-velocity</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.如果所需要的包都已导入,但还是不起作用观察是否写对格式

这里注意除了@Aspect注解外,还要加上@Component注解

在官方文档中有写到:(文章地址)

You may register aspect classes as regular beans in your Spring XML configuration, or autodetect them through classpath scanning - just like any other Spring-managed bean. However, note that the @Aspect annotation is not sufficient for autodetection in the classpath: For that purpose, you need to add a separate @Component annotation (or alternatively a custom stereotype annotation that qualifies, as per the rules of Spring’s component scanner).

有道翻译:

您可以将方面类注册为Spring XML配置中的常规bean,或者通过类路径扫描自动检测它们——就像任何其他Spring管理的bean一样。但是,请注意@Aspect注释并不足以在类路径中进行自动检测:为此,您需要添加一个单独的@Component注释(或者根据Spring组件扫描器的规则,添加一个符合条件的自定义原型注释)。

 

 

springboot切面@Aspect失效解决 springboot切面@Aspect失效解决 在springboot项目中我们经常用到切面进行日志打印或者参数校验,但是有时候会出现失效的情况。看完这篇你就知道怎么解决了。 一、代码示例 看下面日志打印示例代码: import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; import org.apache.tools.ant.util.Dat 阅读详情

相关推荐

Springboot注解@Aspect(一)之@Aspect 作用和Aop关系详解

Springboot注解@Aspect(一)之@Aspect 作用和Aop关系详解

A乐神的博客 7723

Spring项目中@Aspect和@PointCut注解无法使用

runtime

YoYoYoWhatIsUp的博客 1040

F5高可用HA配置详情

F5 HA详细配置

weixin_45843944的博客 3023

关于spring中 @Aspect的不起作用的问题

今天用到 spring中的aop ,@Aspect 注解,当我将@Before中的 描述指定为 单独的1个类时,aop 不起作用; 而 当作用在1个 实现某个接口的实现类后, 或者继承于某个超类时 就奏效了。 或许这就是Aspect编程的一种模式吧。 也算学到了一点。。。

z69183787的专栏 1万+

ComfyUI中一个超好用的变量管理类节点-KJNodes

在AI绘图中,ComfyUI的热度开始慢慢起来一些,但是这个软件在使用的过程中,需要很多连线,仅仅一个最简单的动画生成,就需要连接这么多线条,而且有些线会飞的很远,看起来就很不美观,尤其是一些复杂工作流,连接到最后自己可能已经分不太清楚到底连接好了没有。今天在研究C站的大佬们的工作流的时候,发现一个有意思的工作流,看起来大概是这种感觉:干净整洁。他用到了KJNodes这么个节点来管理变量,git上星标也不算很多,所以我想很多朋友可能还不知道,所以这里简单介绍下用法。

聚梦小课堂 7520

core_analyzer分析c++程序内存占用

环境:centos; 进程:单进程多线程c++程序; 问题:1. 分析系统内存占用; 2. 分析ptmalloc内存空洞(bins上的空闲chunk的大小); 包括:1. 占用了很大内存的c++进程; 2. gcore(在进程不core dump的情况下生成core文件); 3. core_analyzer(分析gcor...

weixin_41644391的博客 4811

解决——》SpringBoot中@Aspect注解不起作用

SpringBoot中@Aspect注解不起作用

小仙~ 5089

InVEST模型实战指南:从水源涵养到热岛缓解的生态系统服务评估

本文提供了InVEST模型的实战指南,详细介绍了从环境搭建、数据预处理到核心模型应用的完整流程。通过水源涵养、碳存储、土壤保持和城市热岛缓解等核心模型的拆解,帮助生态学者与规划者系统量化评估生态系统服务,将复杂的生态价值转化为直观的空间数据与地图,为科学决策提供有力支撑。

weixin_29197051的博客 430

spring AOP注解@Aspect的使用以及spring注解失效的场景

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

weixin_38860401的博客 3万+

我想自己组装一台服务器,微调大模型通义千问2.5 Omni 72B,但是我是个人购买,资金非常有限,最省的方案

阶段动作✅ 推理用 GGUF + llama.cpp + 4090 加载 14B INT4✅ 微调训练 Qwen2.5-7B-Chat,使用 LoRA / QLoRA❌ 放弃Qwen2.5-Omni-72B 全量微调(显存需求 >160G,不现实)

AngelCryToo的专栏 2826

YOLOv8 架构改造实战:添加 P2 小目标检测头与 P6 超大目标检测头

上采样是指将特征图的空间尺寸变大(例如从 20×20 → 80×80),用来提升图像的分辨率。常见于解码器结构或特征融合中。下采样是指将特征图的空间尺寸缩小(例如从 256×256 → 128×128),通常用于减少计算量、提取更高级语义特征。操作目的方法尺寸变化上采样放大特征图插值算法变大(如2×)下采样压缩特征图、提取语义stride卷积等变小(如1/2)

FJN110的博客 575

SpringAOP的注解形式

上一篇讲了配置文件形式的SpringAOP:Spring中的AOP以及切入点表达式和各种通知 本篇继续看一下注解形式怎么去理解和应用AOP 前几篇已经讲了不少AOP相关的知识,本篇不再赘述,直接用代码写一下注解形式的AOP 举的例子还是前几篇的例子,只不过是用注解的形式去用一下AOP package com.cj.study.spring.aop.annotation; public ...

曹举的个人博客 1万+

YOLOv10改进,YOLOv10二次创新C2f结构采用WTConv卷积(感受野的小波卷积),ECCV 2024

WTConv 的核心思想是通过结合卷积神经网络(CNN)的强大特征提取能力与小波变换的多尺度特性,来实现大感受野的卷积操作,同时避免传统大卷积核带来的参数爆炸问题。传统的卷积操作通过滑动小窗口在图像上逐步执行局部特征提取,感受野的大小直接取决于卷积核的尺寸。随着卷积核的增大,参数量呈指数增长,导致网络训练效率降低、计算资源消耗增加。为解决这些问题,WTConv 提出了在小波域中执行卷积操作的策略。小波变换是一种常用于信号处理的技术,能够将信号分解为不同频率成分。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1022

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

在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心!所以本系列就结合案例详细介绍@Aspect方式的切面的各种用法,力求覆盖日常开发中的各种场景。本文带来的案例是:打印Log,主要介绍@Pointcut切点表达式的@annotation方式,以及 五种通知Advice注解:@Before、@After、@AfterRunning、@AfterThrowing、@Around。

天罡gg的专栏 2万+

面经-2023-哲库Zeku-数字芯片设计

面经-2023-哲库Zeku-数字芯片设计

w0shishabi的博客 3907

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring与SpringBoot:SpringAOP使用@Aspect

      在spring中,AOP和IOC都是spring非常重要的特性,而在web开发中,定义切面、增强方法也是比较常见的,比如做统一的日志管理相关的、自定义的注解处理、或者在处理用户请求的前后我们需要做一些处理,等等,这时我们都可以使用切面来实现,而在以前,使用切面我们可能需要使用很多接口和类,现在,我们只需要@Aspect这一个注解就可以定义切面。      首先,我们定义一个类,然后在这...

Wetsion的博客 3279

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

玩转Spring中的@Aspect注解:让你的代码更优雅

Aspect是Spring AOP中的一个注解,用于定义一个切面(Aspect)。切面是一种特殊的类,用于集中处理横切关注点,比如日志记录、事务管理和安全控制等。通过使用@Aspect,你可以在不修改业务逻辑的情况下,实现这些功能。通过使用@Aspect注解,Spring AOP能够让你的代码更加优雅、灵活。无论是日志记录、性能监控还是事务管理,切面编程都能帮助你更好地管理这些横切关注点。不过,使用时也要小心避坑,确保你的应用能够平稳运行。快来试试吧,让你的Spring应用更加出色!

龚小帅的博客 1565

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spring AOP切面编程,注解@Aspect的使用

利用AOP可以对我们边缘业务进行隔离,降低无关业务逻辑耦合性。提高程序的可重用性,同时提高了开发的效率。一般用于日志记录,性能统计,安全控制,权限管理,事务处理,异常处理,资源池管理。

csdndys的博客 1836

【Spring AOP】@Aspect结合案例详解(二): @Pointcut使用@within和within(已附源码)

在微服务流行的当下,在使用Spring Cloud / Spring Boot框架开发中,AOP使用的非常广泛,尤其是@Aspect注解方式当属最流行的,不止功能强大,性能也很优秀,还很舒心! 所以本系列就结合案例详细介绍@Aspect方式的切面的各种用法,力求覆盖日常开发中的各种场景。 本文主要介绍@Pointcut切点表达式的 @within和within 这两种切点指示符,结合案例,十分钟让你彻底搞懂! @within匹配指定类注解, 上文的@annotation是匹配指定方法注解 within匹配

天罡gg的专栏 3792

使用@Aspect注解开发Spring Aop

使用@Aspect注解开发Spring Aop 首先我们先在spring.xml里加入启动aop的代码: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XM...

努力明天会更好的博客 343

Spring Boot 使用 @Aspect 注解实现 AOP

AOP(Aspect Oriented Programming,面向切面编程)是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 在Spring...

wuychn 1万+

[@Aspect注解爆红]

正确的应该是<artifactId>aspectjweaver</artifactId> 而不是<artifactId>spring-aop</artifactId>在SpringAOP的实现过程中,定义切面中通过注解@Aspect来声明当前类是一个切面,但是@Aspec注解爆红。上网查询了一下相关原因,才发现在仓库中复制的Spring AOP依赖不正确。

2301_78658028的博客 809

Spring全家桶常见注解@Repository、@Autowired、@Controller等

从命名约定我们可以看到每个注释都是为了处理各自的传入请求方法类型,如果我们想使用传统的@RequestMapping注释实现URL处理程序,那么它应该是这样的:@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET),新方法可以简化为:@GetMapping(“/get/{id}”)。@Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。

y523648的博客 1051

SpringAOP环绕通知注解形式

package com.weiwen.provider.web.Aspect; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.A...

男人要霸气的博客 5657

【Spring全家桶系列】SpringAOP的实现步骤与工作流程

如果目标对象中的方法会被增强,那么容器中将存入的是目标对象的代理对象,如果目标对象中的方法不被增强,那么容器中将存入的是目标对象本身。 要验证也很简单,在验证程序获取对象后,调用getClass()方法就能获取到它的类型了。

未见花闻的博客 1816

SpringAOP--基与@Aspect注解的aop

SpringAOP–基与@Aspect注解的aop demo @Aspect public class AspectConfig { @Pointcut(value = "execution(* com.poog.code..*.*Test(..)") public void test(){} @Before(value = "test()") public void beforeAdvise(){ System.out.println("before a

weixin_43470959的博客 282
上一篇: 蓝桥杯------2017 Java B组 国赛:第四题 小计算器
下一篇: 前后端分离架构概述
vMars_K
博客等级 码龄10年 5粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值