自动装配构造函数是否会导致 Spring 创建该对象的至少一个实例?

Does autowiring the constructor cause Spring to create at least one instance of that object?

我正在查看通过构造函数的自动装配将对象分配给静态引用的代码:

@Component
class MySpringClass {
  private static PaymentRepo paymentRepo;

  @Autowired
  MySpringClass(PaymentRepo repo) { MySpringClass.paymentRepo = repo; }

  static void usePaymentRepoToDoStuff() { …. using paymentRepo ….. }
}

我了解到不建议通过自动装配分配静态引用。我没有做。不是我的代码。

我找不到显式创建 MySpringClass 的一个实例的地方(但这是很多代码)。此代码工作可靠。

那么,@Autowired 是否会导致 Spring 创建至少一个 MySpringClass 的实例,因此 运行 的构造函数,即使从未在 Java 中显式调用?否则,我会继续寻找并尝试解决这个问题。谢谢。

在 class 上声明的

@Component 将被 Spring 读取,并将被实例化为 Spring Bean(默认情况下,将是一个单例,因此只有一个实例)并且它将被添加到 Spring 应用程序上下文中。如果你 @Autowired 它,你也可以在整个应用程序中使用 MySpringClass

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html

这取决于您的 Spring 容器是否配置了 bean 的默认惰性初始化(默认情况下是急切的,而不是惰性的)。 所以默认情况下 Spring 将在创建 Spring 上下文时创建 bean 实例。 并且由于您使用的是 Spring 您不需要检查代码是否直接使用构造函数,因为 Spring 将创建 bean 而您 不应该 创建标记为 beans 的对象使用构造函数(这消除了依赖注入和控制反转的整个概念)。

在延迟加载的情况下配置 Spring 将仅在需要时创建 bean。