gpt4 book ai didi

Java 在其他对象之间共享对象而不使用 static 的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:17 26 4
gpt4 key购买 nike

我有类 A,它实例化类 B,类 B 又对类 C 执行相同的操作,依此类推,形成一棵大树。我现在需要实例化一个在整个树中都可用的对象,并且我不想在所有类中手动单独注入(inject)该对象。我不想使用静态,因为可能有不同的 A 类实例在不同的线程中同时运行,并且这个共享对象对于每个线程必须是唯一的。我对线程安全操作没有太多经验。

最佳答案

使用Spring来管理实例。这样你就可以将你的实例注入(inject)到任何需要它的类中,并且如果父类的创建是由 spring 管理的,注入(inject)的 bean 将被填充。

更详细地说,您可以做的是定义一个类。

public class MyBean {
// Add your class details.
}

并确保 Springscanning its package或者您已在 applicationContext.xml 文件中定义了该 bean,如 this 。下一阶段是使用 @Autowired 注释在您需要的地方注入(inject)此 bean。

@Autowired
private MyBean myBean;

在创建该类时,myBean 将填充与最初创建的 MyBean 相同的实例。

优点

  • 这样做意味着您的解决方案可以很好地扩展。您可以将它注入(inject)到任何地方,而无需不断更改构造函数(当您创建越来越多的子类和类之间的关系时,这是 Shotgun Surgery 的主要候选者。

  • 了解工业中使用的技术总是好的。

  • 使用其他方法(例如 Singleton 模式)管理类的单个实例通常是一个坏主意。

缺点

  • Spring 所做的不仅仅是注入(inject)对象,而且您需要下拉大量类来执行此操作,这会增加解决方案的大小,尽管不会显着增加。

额外阅读

  • 看看basic Spring tutorial让你继续前进。

  • 看看不同的scopes您可以用它来创建 Bean,以防其中一些更适合您的需求。

关于Java 在其他对象之间共享对象而不使用 static 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28436052/

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