gpt4 book ai didi

java - 为什么获取springboot应用程序的applicationContext很复杂?

转载 作者:行者123 更新时间:2023-12-01 18:46:51 26 4
gpt4 key购买 nike

我的母语不是英语...可能有一些表达错误,请原谅..

//import org.springframework.context.ApplicationContext;

//in a @Component class
@Autowired
private static ApplicationContext context

希望上面的代码能够工作,字段变量context可以获取springboot应用的applicationcontext..但实际上并不起作用。

我已经寻找了一些方法来实现这个目标,但我认为它们很复杂,例如,实现ApplicationContextAware ...

请考虑一下工厂模式。工厂类可能返回的一些实例具有字段变量,需要 @Autowired ,所以它们必须由 Spring 管理,工厂必须 return applicationContext.getBean(...) ,无法使用return new ...return Class.forName(...) ....

我认为工厂模式应该被广泛使用,我想用它来证明简单地像上面的代码一样获取 spring-boot 应用程序的 ApplicationContext 实例是有意义的......以及为什么它仍然很复杂现在?

谢谢。

最佳答案

您可以将 Spring 视为一个可以为您创建对象的工厂。这些对象在 Spring 世界中被称为“Bean”。

因此,通常这些 Bean 无权访问创建它们的工厂。

例如,想想生产“汽车”的工厂,例如丰田或福特。就 OOP 而言,您可以“购买”或“驾驶”汽车(Car 类的实例),但该工厂创建这些实例(new Car)。由于实际的汽车是由 spring 管理的,所以它是一个 bean。现在,如果你将汽车描述为 Java 中的一个类,那么有这样的东西是不合理的,对吗?

@Component
public class Car {

...
private CarFactory carFactory;
}

所以 Spring 已经为你“隐藏”了工厂,并且你有了一个“干净”样板的 Car 类。

现在,至于应用程序上下文本身。它实际上就是那个工厂 - 正如我们的同事已经说过的,您不应该在您的 bean 中真正使用应用程序上下文引用。

如果您确实需要它,您可以注入(inject)应用程序上下文,但它不应该是静态的,通常最好从应该提供方式的 @Configuration 类访问它以更灵活的方式创建 Bean。

关于java - 为什么获取springboot应用程序的applicationContext很复杂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59817322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com