假设我有一个Bean DialogBox,它具有高度和宽度的属性:
public class DialogBox {
int x;
int y;
...
}
Run Code Online (Sandbox Code Playgroud)
在我的applicationContext.xml中,我将属性定义为合理的默认值:
<bean id="dialogbox" class="DialogBox">
<property name="x" value="100"/>
<property name="y" value="100"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
我们有多个使用dialogBox bean的客户端,每个客户端都需要一个x和y的自定义值。我们讨论的一种方法是拥有多个属性文件,每个客户端一个属性文件,并将客户端ID映射到适当的文件,例如,客户端123将映射到dialogbox_123.properties:
dialogbox_123.properties:
x=200
y=400
Run Code Online (Sandbox Code Playgroud)
然后在运行时,当请求Bean时,spring将查看是否为客户端存在定制属性文件,并使用这些属性,否则使用默认值。我知道PropertyOverrideConfigurer,但是AFAIK仅在启动上下文时才起作用,因此对于我们的目的不起作用。春天是否有现成的设施可以实现这一目标,或者有人可以推荐另一种方式?
scope="prototype",以便每次需要实例时,都应创建一个新实例。prototypebean 注入到singletonbean 中,请使用lookup-method(在此处搜索查找方法)我不确定这是否适合你的情况。另一个建议是:
在@PostConstruct各种“客户端”的方法中,根据需要在已注入的对话框窗口上设置属性。喜欢:
public class MyDialogClient {
@Autowired
private Dialog dialog;
@PostConstruct
public void init() {
dialog.setWidth(150); //or read from properties file
dialog.setHeight(200);
}
...
}
Run Code Online (Sandbox Code Playgroud)
同样,在这种情况下,您可以使用该scope属性。