如何确保一个类只能由Spring实例化?

时间:2013-04-01 09:34:51

标签: java spring dependency-injection autowired

我正在重新考虑遗留Java应用程序以使用Spring。

这涉及将应用程序类声明为Spring bean,然后将所有new替换为context.getBean OR替换为DI

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

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

1 个答案:

答案 0 :(得分:4)

从你的问题开始

  

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

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

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

让你的构造函数变得私有,而且没有人可以调用它。此外,如果旧代码的某些部分使用new来实例化您的类,您将在编译时看到错误。