我的编程空间,编程开发者的网络收藏夹
学习永远不晚

解决spring项目找不到Aspect依赖注解的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

解决spring项目找不到Aspect依赖注解的问题

spring项目找不到Aspect依赖注解

昨天写一个项目的时候在使用Aspect时一直找不到依赖,alt+enter自动添加Maven依赖还是解决不了问题。

在这里记录下,希望能对大家有帮助。

在pom.xml中添加一下依赖:


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

添加如上依赖,等待安装之后,@Aspect注解就能正常使用了。

【特殊情况】

SpringBoot @Aspect注解不起作用的问题

搭建项目使用SpringBoot的AOP时候,发现一个问题。

我AOP类已经搞好了之后,项目运行起来,调用前后不会在控制台打印。

我的AOP类是这样的:


@Component
@Aspect
public class LogAspect {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
//  @Pointcut("execution(* com.wz.blog.*.*(..))")指定拦截com.wz.blog包下所有类的所有方法
    @Pointcut("execution(* com.wz.blog.*.*(..))")
    public void log() {}
    @Before(value = "log()")
    public void doBefore(){
        System.out.println("方法执行前。");
        logger.info("—————————————————doBefore—————————————————");
    }
    //在每个日志横切面之后执行
    @After(value = "log()")
    public void doAfter(){
        System.out.println("方法执行后。");
        logger.info("—————————————————doAfter—————————————————");
    }
    @AfterReturning(returning = "result",pointcut = "log()")
    public void doAfterReturn(Object result){
        logger.info("Result : {}" + result);
    }
}

我的项目树结构是这样的

在这里插入图片描述

但是运行起来也没报错。

我是出现了这样的情况:

在这里插入图片描述

如上图,在index前后应该有INFO输出和控制台打印的,然而我并没有。

针对以上问题网上有多种解决方案: (而我的解决方案仍不在其中。)

1、检查pom.xml类中是否依赖。

2、检查启动类中是否有这两个注解


@ComponentScan("com.wz.blog.*")
@EnableAspectJAutoProxy(proxyTargetClass = true)

3、检查AOP类中除了@Aspect注解还应该有@Component注解。(这里@Component用于开启组件扫描,使得SpringBoot可以找到它。即交由SpringBoot管理。)

4、检查AOP版本是否过老。

5、检查AOP类是否和启动类在同一等级。如果不在,应该使用2的方法进行指定。(这个方法和2有点重复)

好吧以上就是我搜罗的各种大牛提供的解决方法,无疑这些都是让人欲罢不能的干货。然而并没有解决我的问题。

在多个小时的反复测试之后,发现一个突破口:当我把AOP类中 @Pointcut("execution(* com.wz.blog.*.*(..))")的乱写成 @Pointcut("execution(* com.xxx.xxx.*.*(..))")时候,报错了,报错信息如下:

warning no match for this type name:com.xxx.xxx [Xlint:invalidAbsoluteTypeName]

它说名称不匹配?也就是说我的AOP类在项目运行时是被调用加载了的,这让我放心了,我一开始以为此类未参与项目运行。

那么我接着思考,有没有可能是AOP语法出错?导致我一开始指定的包压根没找到,或者说来没来得及找到?于是我在网上搜索了报错warning no match for this type name:com.xxx.xxx [Xlint:invalidAbsoluteTypeName]的原因。

发现,有的人在写成execution(* com.wz.blog.*.*(..))是没有任何错误的,说明很可能不是AOP语法的问题。

最终我发现,在IDEA不同的版本上运行,结果各不相同。

此前我使用IDEA正式版2020.1.1, 项目运行时AOP类就是不生效,而当我使用社区版运行时——

在这里插入图片描述

好吧,运行成功了。

但是我们不能一直使用社区版。

然后,就让我找到了IDEA正式版的解决方案。

代码如下:


@Component
@Aspect
public class LogAspect {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Pointcut("execution(* com.wz.blog.*..*(..))")
    public void log() {}
    //在每个日志横切面之前执行
    @Before(value = "log()")
    public void doBefore(){
        System.out.println("方法执行前。");
        logger.info("—————————————————doBefore—————————————————");
    }
    //在每个日志横切面之后执行
    @After(value = "log()")
    public void doAfter(){
        System.out.println("方法执行后。");
        logger.info("—————————————————doAfter—————————————————");
    }
//    returning = "result"实现通过参数result捕获以上拦截方法的返回内容,pointcut = "log()"是取得切面
    @AfterReturning(returning = "result",pointcut = "log()")
    public void doAfterReturn(Object result){
        logger.info("Result : {}" + result);
    }
}

没错,和一开始需要改动的地方,只有一个微小的地方不一样。(不是注释)把


@Pointcut("execution(* com.wz.blog.*.*(..))")

改成


@Pointcut("execution(* com.wz.blog.*..*(..))")

一个“.”的差别。

好吧,困扰大半天的谜团就此解开。

最后的最后,极度怀疑这个问题是IDEA2020.1.1的版本坑导致。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

解决spring项目找不到Aspect依赖注解的问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

解决IDEA项目external libraries依赖包消失的问题

当IDEA项目的ExternalLibraries依赖包消失时,可以尝试以下解决方案:检查互联网连接重新导入Maven项目清理Maven缓存检查Maven设置更新Maven重建索引重置IDEA设置其他提示:检查依赖包版本尝试使用Gradle联系IDEA支持团队
解决IDEA项目external libraries依赖包消失的问题
2024-04-02

IDEA maven项目依赖无法解析问题怎么解决

本文小编为大家详细介绍“IDEA maven项目依赖无法解析问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“IDEA maven项目依赖无法解析问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-05

spring bean的自动注入及循环依赖问题怎么解决

这篇文章主要介绍了spring bean的自动注入及循环依赖问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring bean的自动注入及循环依赖问题怎么解决文章都会有所收获,下面我们一起来看看吧
2023-07-05

如何解决springboot项目找不到resources目录下的资源问题

小编给大家分享一下如何解决springboot项目找不到resources目录下的资源问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!springboot项目找不到resources目录下的资源问题描述:将老的mvc项目
2023-06-20

IDEA引MAVEN项目jar包依赖导入问题解决方法

IDEA内置了Maven环境,默认采用Maven解决项目依赖问题。在新建项目后,项目的路径中会生成pom.xml文件和项目名.iml文件。新建项目后,IDEA不会自动刷新Maven的依赖。以Spring Application为例,新建项目
2023-05-30

如何解决切换SkyDrive账户找不到注销选项的问题

这期内容当中小编将会给大家带来有关如何解决切换SkyDrive账户找不到注销选项的问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。SkyDrive是win8系统的自带应用,可以帮我们云端存储一些文件和w
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录