在一次普通类中使用@Autowired、@Resource或者@Autowired+@Qualifier对变量进行自动注入,在spring容器中,该实例对象已经注册后成功,但是自动注入失败。
原因分析: 普通类是无法实现@Autowired等自动注入的,需要将该类也注入到spring容器中,像常见的Controller层中使用@Controller将类加入容器,再自动注入Service层的实例;Service层使用@Service将类加入到容器,再自动注入DAO层的实例;DAO层使用@Mapper将类加入到容器中,或者使用@MapperScan将dao包下类扫描在spring容器中进行注册。

解决方法:

一、使用@Component将该普通类注册在Spring容器中,接着就可以@Autowired等注解自动注入容器中的实例。

二、将这个普通类中的方法及变量都定义成静态方法和静态变量,在该普通类中,可以使用该类的类名.方法名使用方法;
或者该类对象名.方法名使用方法,即使该对象为空,也可以使用该静态方法;因为在编译过程中会将对象名为空的静态方法自动替换为该静态方法的类名。

值为null的对象为什么可以调用静态方法而不报错(空指针)呢?

三、有的时候有一些类不想注入到容器中,有Spring容器实例化,但是又想使用Spring中的一些容器,所以就可以借助工具类来获取。
SpringBoot中普通类无法通过@Autowired自动注入Service、dao等bean解决方法

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐