Spring MVC Aop注入遇到空指针bug
目录
- 过滤
- bug描述
- 源码
- 问题分析
- 改进的代码
过滤
如果是配置增强后报空指针,而且没有使用Around的方式,有可能有以下几种情况:
- Controller层的调用service层时的方法为private,或者service层调用mapper的private方法。
- Controller、service、mapper没有加@Component一类的注解,如@Controller,@Service(注解开发,使用XMl配置的话可以不用)
@Controller
@RequestMapping("/order")
public class OrderController {......
}
- 调用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相关推荐
- Spring MVC AOP切面失效原因与处理
Spring MVC AOP切面失效原因与处理 问题概述 AOP的两类实现 解决方案 方法一:用Autowired 注入自身的实例 方法二:从Spring上下文获取增强后的实例引用 方法三: 利用Ao ...
- java动态菜单显示实现,java – 为Spring MVC / AOP应用程序实现动态菜单
我希望为我的 Spring MVC应用程序实现动态可更改的菜单(无论何时添加带注释的方法或控制器). 我想要的是引入新的注释(@RequestMenuMapping),它将转到@Controller ...
- 省掉bean自定义spring mvc注解注入json值
注解hello(@JsonArg String msg)直接获取body{"msg": "ok!"}中的ok!,不用定义一个bean来接收没有的字段. Json ...
- Spring MVC 中使用AOP 进行统一日志管理--XML配置实现
1.介绍 上一篇博客写了使用AOP进行统一日志管理的注解版实现,今天写一下使用XML配置实现版本,与上篇不同的是上次我们记录的Controller层日志,这次我们记录的是Service层的日志.使用的 ...
- java-12:spring MVC - 控制反转IOC,依赖注入DI
学习spring框架之前,先理解几个概念: 1.第一部分:依赖倒置原则 2.第二部分:控制反转,控制反转容器(实例) 3.第三部分:控制反转,控制反转容器(全面理解,面试题) 综合性理解:控制反转(I ...
- spring aop 注入源码解析
spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...
- spring aop 注入源码解析 1
spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...
- modelandview使用过程_面试问烂的 Spring AOP 原理、Spring MVC 过程
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:莫那一鲁道链接:www.jianshu.com/p/e18fd44964eb Spring AOP ,SpringMVC ,这两个应该 ...
- Spring MVC 基于注解的class文件打成jar包后注入失败
异常信息: Spring MVC Autowired – No qualifying bean of type [] found for dependency: expected at least 1 ...
最新文章
- 演技之神周润发背后的故事——评影帝周润发鲜为人知的封神之路
- tomcat使用php+mac_Mac环境下配置tomcat
- ThreadLocal的意义和实现
- C++前缀++/–比后缀++/–的效率高
- 深入理解DPDK程序设计|Linux网络2.0
- redhat9.0配置apache 出现乱码
- mysql是表级锁还是行级锁_带你了解MySQL数据库中的全局锁、表级锁、行级锁
- MVC3和MVC4内置Razor引擎的差异
- PAT 1059 Prime Factors[难]
- 白杨SEO:SEM和SEO有什么区别呢?
- Spine 1.73+ 和谐版
- 路飞学城python开发ftp_路飞学城-Python开发集训-第一章
- java基础 --- 求一元二次方程的根(分情况讨论)
- Eclipse:source 1.5 中不支持 diamond 运算符
- 【AWS云从业者基础知识笔记】——模块10:云计算之旅
- iphone12绿色好看 ,相比被全民吐槽的蓝色,绿色是怎么做到零差评的
- GICV2GICV3的基础知识
- yolov5 的 detect 层 与 anchor 机制
- db2替换激活永久lic
- 凤凰舞者 归来 之 歌曲 介绍