0

我正在重构一个遗留 Java 应用程序以使用 Spring。

这涉及将应用程序类声明为 Spring bean,然后将所有出现的 替换newcontext.getBeanDI

我正在以某些类成为单例的方式重写应用程序逻辑。但是,由于它们是在其他位置使用 new 实例化的,因此会存在多个副本,这会打乱业务逻辑。我想确保应用程序在尝试自行实例化对象时显式失败,而不是以不可预测的方式运行和行为不端。(我不确定重构是否覆盖了 100% 的应用程序,但仍有可能在某个角落潜伏新的)

确保类只能由 Spring 容器实例化的最佳方法是什么?(我希望避免为每个班级写一个工厂)

4

1 回答 1

4

从你的问题

在这个特定场景中,应该只存在从上下文中获取的对象的一个​​副本,多个副本会弄乱业务逻辑。

您可以在 spring 的 xml 文件中的 bean 定义中创建经典的单例并将getInstance()方法用作工厂方法:

<bean id="myBean" class="MyClass" factory-method="getInstance"/>

将您的构造函数设为私有,并且没有人可以调用它。此外,如果旧代码的某些部分new用于实例化您的类,您将在编译时看到错误。

于 2013-04-01T09:44:04.350 回答