自动装配构造函数是否会导致 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。
这取决于您的 Spring 容器是否配置了 bean 的默认惰性初始化(默认情况下是急切的,而不是惰性的)。
所以默认情况下 Spring 将在创建 Spring 上下文时创建 bean 实例。
并且由于您使用的是 Spring 您不需要检查代码是否直接使用构造函数,因为 Spring 将创建 bean 而您 不应该 创建标记为 beans 的对象使用构造函数(这消除了依赖注入和控制反转的整个概念)。
在延迟加载的情况下配置 Spring 将仅在需要时创建 bean。
我正在查看通过构造函数的自动装配将对象分配给静态引用的代码:
@Component
class MySpringClass {
private static PaymentRepo paymentRepo;
@Autowired
MySpringClass(PaymentRepo repo) { MySpringClass.paymentRepo = repo; }
static void usePaymentRepoToDoStuff() { …. using paymentRepo ….. }
}
我了解到不建议通过自动装配分配静态引用。我没有做。不是我的代码。
我找不到显式创建 MySpringClass 的一个实例的地方(但这是很多代码)。此代码工作可靠。
那么,@Autowired 是否会导致 Spring 创建至少一个 MySpringClass 的实例,因此 运行 的构造函数,即使从未在 Java 中显式调用?否则,我会继续寻找并尝试解决这个问题。谢谢。
@Component 将被 Spring 读取,并将被实例化为 Spring Bean(默认情况下,将是一个单例,因此只有一个实例)并且它将被添加到 Spring 应用程序上下文中。如果你 @Autowired 它,你也可以在整个应用程序中使用 MySpringClass。
这取决于您的 Spring 容器是否配置了 bean 的默认惰性初始化(默认情况下是急切的,而不是惰性的)。 所以默认情况下 Spring 将在创建 Spring 上下文时创建 bean 实例。 并且由于您使用的是 Spring 您不需要检查代码是否直接使用构造函数,因为 Spring 将创建 bean 而您 不应该 创建标记为 beans 的对象使用构造函数(这消除了依赖注入和控制反转的整个概念)。
在延迟加载的情况下配置 Spring 将仅在需要时创建 bean。