You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未注册为Spring Bean的测试类中,能否使用@Autowired注解?

问题解答

为什么你的测试类里@Autowired能生效,但从ApplicationContext拿不到这个类的Bean?

  • 你的测试类MockingTest加了@SpringBootTest注解,Spring Test框架会针对测试类做特殊处理:它会启动Spring上下文,然后直接从上下文里取出匹配的Bean,赋值给测试类的@Autowired字段——这个过程不需要把测试类本身注册成Spring Bean。
  • 正因为测试类没被注册为Bean,所以你调用context.getBean(MockingTest.class)时,Spring容器里根本没有这个类的Bean定义,自然会提示不存在。

能不能在不将类注册为Spring Bean的情况下使用@Autowired?

分两种场景:

  • 测试类场景:可以。Spring Test框架(包括@SpringBootTest、@WebMvcTest等测试注解)专门做了适配,允许在非Bean的测试类中使用@Autowired、@MockBean等注解,框架会负责完成字段的注入逻辑。
  • 业务类场景:不行。@Autowired的常规注入逻辑依赖Spring容器对Bean的生命周期管理,只有被Spring容器管理的Bean(比如加了@Component、@Service、@Repository等注解,或者通过配置类注册的Bean),Spring才会处理其内部的@Autowired字段注入。非Bean类的@Autowired字段Spring不会识别,也不会自动注入。

补充说明你的代码

你代码里的@Mock和@InjectMocks是Mockito的注解,和Spring无关——Mockito会负责创建Mock实例,并把Mock注入到@InjectMocks标注的对象里,这个过程也不需要Spring参与。

内容的提问来源于stack exchange,提问作者fast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:36:26