Spring MVC中@Controller的@Autowired注入失败问题求助
我之前在Spring MVC项目里也踩过类似的Autowired注入坑,结合你给出的报错信息,给你梳理几个最常见的排查方向,你可以一个个核对:
服务类未被Spring容器管理
先检查你的MyAppService类上有没有添加@Service(或@Component、@Repository这类Spring组件注解)。如果没加,Spring根本不会把它实例化成Bean,自然没法注入到Controller中。另外还要确认这个类所在的包是否被Spring的组件扫描覆盖——比如你的配置类有没有用@ComponentScan指定正确的包路径,或者XML配置里的<context:component-scan>标签的扫描范围是否包含了Service所在的包。Controller实例并非由Spring创建
虽然你说WebController已经被创建,但要确认是不是Spring容器创建的实例。如果你是通过new WebController()手动创建的对象,那Spring不会为这个手动实例注入任何依赖——只有Spring自身管理的Bean之间才能实现自动注入。另外也再核对下Controller上的@Controller注解有没有正确添加。服务接口存在多个实现类导致歧义
如果MyAppService是接口,且有多个实现类都标注了@Service,Spring会因为不知道该注入哪个Bean而抛出依赖不满足的错误。这种情况你可以给其中一个实现类添加@Primary注解,指定它为优先注入的Bean;或者在Controller的注入字段上用@Qualifier("beanName")明确指定要注入的Bean名称(默认Bean名称是类名首字母小写,比如MyAppServiceImpl对应的Bean名是myAppServiceImpl)。组件扫描范围配置错误
比如你的Controller在com.example.controller包,Service在com.example.service包,但你的@ComponentScan只配置了扫描com.example.controller,那Service类就不会被注册成Spring Bean,自然无法注入。检查下你的配置类或XML文件中的扫描路径,确保包含了所有需要被Spring管理的类所在的包。存在循环依赖问题
如果WebController注入了MyAppService,而MyAppService又反过来注入了WebController,这种循环依赖可能导致Spring无法完成Bean的初始化,从而抛出依赖不满足的异常。可以检查下两个类的依赖关系,看看是否存在循环引用的情况。Bean作用域冲突(概率较低)
比如Service的作用域是@Scope("prototype"),而Controller是默认的singleton作用域,虽然一般不会直接导致注入失败,但如果Service的创建过程存在异常,也可能引发这类错误。可以作为最后排查的方向。
附上你提供的报错信息:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webController': Unsatisfied dependency expressed through field 'myAppService'; nested ...
内容的提问来源于stack exchange,提问作者user550738

