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

不用写触发器!帆软填报报表自动记录创建/修改时间的终极方案

本文详细介绍了帆软填报报表中无需编写数据库触发器,即可自动记录数据创建时间和修改时间的终极方案。该方案利用帆软内置函数和单元格条件属性,在应用层实现日期自动生成,有效规避了触发器带来的权限、维护和部署难题,为数据填报提供了更轻量、灵活且易于维护的解决方案。

weixin_28040125的博客 359

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

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

z69183787的专栏 1万+

从零到一:树莓派上的YOLO目标检测实战指南

本文详细介绍了如何在树莓派上部署和优化YOLO目标检测模型,从硬件选型到系统配置,再到模型转换与推理优化。通过对比不同树莓派型号的性能差异,提供实用的配置方案和代码示例,帮助开发者快速实现高效的边缘计算视觉系统。特别推荐使用ONNX格式进行模型转换,以提升在树莓派上的推理效率。

weixin_29046035的博客 1063

从零开始搭建Proxmox VE虚拟化网络:手把手教你配置桥接、VLAN和链路聚合

本文详细介绍了如何在Proxmox VE虚拟化环境中配置桥接、VLAN和链路聚合网络。通过分步指南和实战案例,帮助用户掌握Linux Bridge、VLAN隔离和Bonding技术,构建高性能、高可用的企业级虚拟化网络架构。

wind6的博客 976

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

SpringBoot中@Aspect注解不起作用

小仙~ 5089

基于51单片机+SYN6288语音播报

51单片机控制SYN6288语音播报资料SYN6288模块原理图语音合成命令接线如何接线实现原理程序代码main.csyn6288.cuart.cdelay.c基于 51单片机的其他项目基于51单片机+遥控灯基于51单片机+LCD1602显示基于51单片机+红外遥控解码+LCD1602显示基于51单片机+DHT11温湿度+LCD1602显示基于51单片机+DS18B20温度测温器+LCD1602显示尾声 资料 我用的是绿深电子技术的模块,资料也挺齐全的。也有相关例程。 SYN6288模块原理图 语音合成

weixin_47457689的博客 3万+

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

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

weixin_38860401的博客 3万+

【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part1项目介绍与环境准备

看到这篇文章的你,相信对知识图谱相关概念不在陌生。知识图谱相关内容在实际开发中包含两个部分:1.知识图谱构建,2.知识图谱使用。知识图谱构建过程中涉及内容、技术都比较多。知识图谱的应用也逐渐在我们的生活中随处可见,其中基于知识图谱的问答系统就是其中的一个应用。基于知识图谱的问答系统称做KGQA(knowledge graph question answer),也有人称其为KBQA(knowledge based question answ).基于知识图谱的问答系统通常是使用的是领域知识图谱。下面就结合Git

让算法融入生活,改变生活! 4717

Claude Desktop新功能:让非技术人士也能自主编程

摘要: Anthropic近日在Claude桌面应用中集成了Claude Code功能,显著降低了非技术用户的使用门槛。Claude Code作为代理式编程工具,支持多任务并行处理、Git隔离和可视化会话管理,无需命令行操作即可实现代码调试、重构等复杂任务。新增的“计划模式”通过先分析后执行的流程,确保安全性,使产品经理、数据分析师等非开发者也能参与技术工作。这一更新标志着AI技术正打破专业壁垒,让领域专家无需编码背景即可利用高级工具,推动技术民主化。

独立开发,substack顶级编辑 1540

SpringAOP的注解形式

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

曹举的个人博客 1万+

大唐杯历届省赛押题训练(6)

考试-TD-LTE无线网络设备介绍-TD-LTE网络架构一、单选题1TD-LTE的接入网E-UTRAN由下列哪些网元组成( )。0分/1分A、RNCB、BTSC、eNode BD、Node B提交答案:B正确答案:C考点TD-LTE网络架构解析暂无试题解析二、多选题1关于LTE网络整体结构,哪些说法是正确的( )0分/2分A、E-UTRAN用E-NodeB替代原有的RNC-NodeB结构B、E-NodeB间的接口为S1接口C、各网络节点之间的接口使用IP传输。

nimo观察者 634

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

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

天罡gg的专栏 2万+

MIPI C-PHY介绍(Specification for C-PHY V1.2)

本文档描述了一个名为C-PHY的高速串行接口,它在带宽有限(bandwidth limited channels,看的有人说C的含义就是channel limit)的通道上提供高吞吐量性能,用于连接到外设,包括显示器和摄像头。首先0x4fff在0x4000~0x4fff区域,则f=(0,0,0,0,0,0,1),顺序是S6~S1;最后,端到端的传输过程是什么样呢,如下图所示,16bit先转换成7个符号(每个符号3位,共21位),然后并行数据转换成串行数据,输送到符号编码器和3个线的驱动器,接收端流程相反。

qflook的博客 5875

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring与SpringBoot:SpringAOP使用@Aspect

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

Wetsion的博客 3279

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

龚小帅的博客 1565

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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、付费专栏及课程。

余额充值