[已解决]:封装Controller层中那些用到Mapper接口类方法的方法(BeanCreationNotAllowedException&NullPointException)

问题现象:

今天在研究如何提取Controller层方法的过程中,在postman中调用Controller层的接口之后,出现了BeanCreationNotAllowedException报错;

或者是NullPointException的空指针异常.


问题分析:

1.在提取了Controller层的方法到CollectUtil类之后,再调用时,出现以下问题,显示方法非静态报错:

在将方法修改为static静态方法之后,再用postman调用Controller层接口后,又发生NullPointException空指针异常的报错:

通过查看错误信息可知:是因为工具类中使用到的Mapper接口的方法,而Mapper类是个interface接口,必须创建实例才能正常调用其中的方法,而在static静态环境中,Mapper接口是没有实例对象存在的,因此在调用该对象的方法时,就会报错:NullPointException.因此修改为static无法解决问题.

那么该如何使用实例对象的方法呢?

其实很简单就是:不要用类名调用!

把CollectUtil.collectTaskExecute(absolutePath);

改为:collectUtil.collectTaskExecute(absolutePath);

此时collectUtil是个对象引用,因此我们可以用@Autowired注解来注释CollectUtil collectUtil:

2.BeanCreationNotAllowedException报错:

在按照1.修改之后,再用postman调用Controller层接口后,出现报错:BeanCreationNotAllowedException

通过查看报错信息和代码可知:

该报错是因为Spring容器创建bean对象时出问题了,在CollectUtil类中我将四个属性:xxxMapper接口加上了@Autowired注解,实现了由Spring来管理创建对象,但是却忽略了一个问题:

通过查看该类抬头可知,我忘记将这个类也交给Spring管理了,因此还需要该CollectUtil类加上注解@Component,将该类交给Spring容器管理.


解决方法:

给CollectU类加上注解@Component

运行成功:

Controller层接口调用也成功了.

猜你喜欢

转载自blog.csdn.net/weixin_42585386/article/details/109157051