目录

  • 过滤
  • bug描述
  • 源码
  • 问题分析
  • 改进的代码

过滤

  如果是配置增强后报空指针,而且没有使用Around的方式,有可能有以下几种情况:

  1. Controller层的调用service层时的方法为private,或者service层调用mapper的private方法。
  2. Controller、service、mapper没有加@Component一类的注解,如@Controller,@Service(注解开发,使用XMl配置的话可以不用)
@Controller
@RequestMapping("/order")
public class OrderController {......
}
  1. 调用service层对象和mapper层对象没有加@Autowired注解。
@Autowired
public OrderService orderService;

如果有使用Around配置增强则可以看看下面的内容,希望对你有帮助!

bug描述

  在切面类中使用Around配置增强时,编译可以通过,但是调用方法时抛出空指针异常。
  如果只有AfterReturning配置增强时,可以正常运行。

源码

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;@Aspect
@Component
public class Logcat {@Pointcut("execution(* edu.fzu.tmall.service.*.*(..))")public void pointCut(){}@AfterReturning("pointCut()")public void logcat(JoinPoint joinPoint){System.out.println(joinPoint.getTarget());System.out.println(joinPoint.getSignature().getName());}@Around("pointCut()")public void test()  {System.out.println("环绕增强...");}
}

问题分析

  个人原因,是Spring 的AOP没有认真学习,推测Around配置增强的方式与Before、AfterReturning等配置增强的方式不一样,他要有类型为ProceedingJoinPoint的参数,而且返回ProceedingJoinPoint对象的proceed方法的返回值(个人推测,没有深究)

改进的代码

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;@Aspect
@Component
public class Logcat {@Pointcut("execution(* edu.fzu.tmall.service.*.*(..))")public void pointCut(){}@AfterReturning("pointCut()")public void logcat(JoinPoint joinPoint){System.out.println(joinPoint.getTarget());System.out.println(joinPoint.getSignature().getName());}@Around("pointCut()")public Object test(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {System.out.println("环绕前增强...");Object proceed = proceedingJoinPoint.proceed(); //切点方法System.out.println("环绕后增强...");return proceed;}
}

  改进后的代码运行就正常也,也在控制台输出了该输出的信息!

记录时间:2022-5-17 01:34

Spring MVC Aop注入遇到空指针bug相关推荐

  1. Spring MVC AOP切面失效原因与处理

    Spring MVC AOP切面失效原因与处理 问题概述 AOP的两类实现 解决方案 方法一:用Autowired 注入自身的实例 方法二:从Spring上下文获取增强后的实例引用 方法三: 利用Ao ...

  2. java动态菜单显示实现,java – 为Spring MVC / AOP应用程序实现动态菜单

    我希望为我的 Spring MVC应用程序实现动态可更改的菜单(无论何时添加带注释的方法或控制器). 我想要的是引入新的注释(@RequestMenuMapping),它将转到@Controller ...

  3. 省掉bean自定义spring mvc注解注入json值

    注解hello(@JsonArg String msg)直接获取body{"msg": "ok!"}中的ok!,不用定义一个bean来接收没有的字段. Json ...

  4. Spring MVC 中使用AOP 进行统一日志管理--XML配置实现

    1.介绍 上一篇博客写了使用AOP进行统一日志管理的注解版实现,今天写一下使用XML配置实现版本,与上篇不同的是上次我们记录的Controller层日志,这次我们记录的是Service层的日志.使用的 ...

  5. java-12:spring MVC - 控制反转IOC,依赖注入DI

    学习spring框架之前,先理解几个概念: 1.第一部分:依赖倒置原则 2.第二部分:控制反转,控制反转容器(实例) 3.第三部分:控制反转,控制反转容器(全面理解,面试题) 综合性理解:控制反转(I ...

  6. spring aop 注入源码解析

    spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...

  7. spring aop 注入源码解析 1

    spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...

  8. modelandview使用过程_面试问烂的 Spring AOP 原理、Spring MVC 过程

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:莫那一鲁道链接:www.jianshu.com/p/e18fd44964eb Spring AOP ,SpringMVC ,这两个应该 ...

  9. Spring MVC 基于注解的class文件打成jar包后注入失败

    异常信息: Spring MVC Autowired – No qualifying bean of type [] found for dependency: expected at least 1 ...

最新文章

  1. 演技之神周润发背后的故事——评影帝周润发鲜为人知的封神之路
  2. tomcat使用php+mac_Mac环境下配置tomcat
  3. ThreadLocal的意义和实现
  4. C++前缀++/–比后缀++/–的效率高
  5. 深入理解DPDK程序设计|Linux网络2.0
  6. redhat9.0配置apache 出现乱码
  7. mysql是表级锁还是行级锁_带你了解MySQL数据库中的全局锁、表级锁、行级锁
  8. MVC3和MVC4内置Razor引擎的差异
  9. PAT 1059 Prime Factors[难]
  10. 白杨SEO:SEM和SEO有什么区别呢?
  11. Spine 1.73+ 和谐版
  12. 路飞学城python开发ftp_路飞学城-Python开发集训-第一章
  13. java基础 --- 求一元二次方程的根(分情况讨论)
  14. Eclipse:source 1.5 中不支持 diamond 运算符
  15. 【AWS云从业者基础知识笔记】——模块10:云计算之旅
  16. iphone12绿色好看 ,相比被全民吐槽的蓝色,绿色是怎么做到零差评的
  17. GICV2GICV3的基础知识
  18. yolov5 的 detect 层 与 anchor 机制
  19. db2替换激活永久lic
  20. 凤凰舞者 归来 之 歌曲 介绍

热门文章

  1. 信息时代碎片化学习的理解
  2. flac转换成mp3,4种方法教会你
  3. mui框架手机端APP开发
  4. 北美电影票房Top10-2019年12月20日:《星战9》1.77亿不及预期
  5. 亚马逊要求的FCC-ID和 CE-RED认证的定频机是什么
  6. itss认证费用多少钱
  7. MongoDB 分片总结
  8. 网站调用在线二维码生成 api
  9. 虚拟机栈、堆、方法区的区别特点
  10. 用大气噪声生成Java中的随机数