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

Spring中@Import导入的配置类内所有Bean都会被实例化吗?

结论

不会仅因为Bean x被实例化就触发B中所有定义的Bean实例化,具体的实例化逻辑由Bean的作用域、懒加载配置、依赖关系共同决定。


1. 默认配置场景(单例作用域、未配置懒加载)

Spring默认会在容器启动阶段预实例化所有单例Bean,不管这些Bean是否被其他Bean依赖。这种情况下B中定义的所有单例Bean都会在容器启动时完成实例化,并不是在x实例化时才触发。
涉及的配置类代码如下:

// A.java
@Configuration
@Import(B.class)
class A {
   @Bean
   public X x(Y y) {
       return new X(y);
   }
}
// B.java
@Configuration
class B {
  @Bean
  public Y y() {
     return new Y();
  }
  // 还定义了其他若干Bean
}

2. 非预实例化场景(配置了懒加载/Bean为非单例作用域)

如果B中的Bean单独标注了@Lazy、全局开启了懒加载配置,或者Bean的作用域是prototype、request等非单例类型,那么Bean的实例化会推迟到第一次被使用时才触发。
此时如果只有x依赖B中的Y实例,没有其他Bean依赖B中定义的其他Bean,也没有代码显式获取这些Bean,那么Spring只会实例化Y来满足x的依赖,B中其他的Bean不会被实例化。

@Import的作用说明

@Import(B.class)的核心作用是将B配置类注册到Spring容器中,让Spring可以解析B中定义的Bean声明,它本身不会强制触发B中所有Bean的实例化,Bean的实例化规则和普通的配置类完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:04