【发布时间】:2014-03-29 18:43:03
【问题描述】:
我是 Spring 框架的新手,找不到实现以下目标的方法:
我正在使用一个属性都是私有的并且没有设置器的类(使用该类的对象的预期方法是使用构造函数设置一次属性) - 我将其称为 Preferences时间>。我还有一些类,每个类都具有相同的 Preferences 实例作为属性。 Preferences 旨在包含某些属性,其中一些只能在运行时解析(例如,由用户提供)。
在我的 .xml 文件中,我会写如下内容:
<bean id="preferenes" class="Preferences" scope="singleton">
<constructor-arg index="0" value="defaultAttrOne" />
<constructor-arg index="1" value="defaultAttrTwo" />
<constructor-arg index="2" value="defaultAttrThree" />
</bean>
<bean id="someOtherBean" class="SomeOtherClass" scope="singleton">
<constructor-arg index="0" ref="preferences" />
</bean>
也就是说,我可以提供默认值并在运行时将其中一些替换为自定义值。由于我无法修改 Preferences 的现有实例的属性,因此我必须构造一个新对象并以某种方式使 SomeOtherClass 的实例指向该新对象(这可以通过 bean 机制实现吗?)。
相反,我会在实例化任何 bean 之前将所需的运行时构造函数参数传递给 preferences bean(这些参数将在第一次调用 ApplicationContext 的构造函数之前知道)。我知道有一种 getBean() 方法的风格,它将可变参数作为初始化参数,尽管它仅适用于原型 bean。在这种情况下,我想初始化一次 Preferenes 并让所有帮助程序类都引用该单个实例。
感谢您的任何提示。
【问题讨论】:
-
使用属性解析。
-
您介意再详细说明一下吗?
-
使用属性占位符
${somePropertyName}并配置PropertyPlaceholderConfigurer。然后在刷新ApplicationContext之前在运行时添加属性。
标签: java spring dependency-injection