以编程方式修改Spring bean

时间:2012-07-05 08:25:14

标签: java spring spring-mvc

我目前正在开发一个Web应用程序。我知道Spring的一些基础知识,但是我并没有那么多地使用它,因此我决定提高我的Spring技能,而且我遇到了一个问题,我无法找到一个好的解决方案。

我想在我的应用程序中实现一个功能,允许用户配置所有内容而无需触及任何配置文件(例如spring bean),基本上想要部署,启动和使用应用程序的人应该只复制.WAR文件进入例如tomcat,所有配置都应该在app中完成(例如在OpenFire中)。

所以我想用户部署应用程序转到某个URL并且一切都是通过UI完成的,一旦所有细节都被提供,他会被问及一些参数(例如数据库连接细节),所有细节都存储在cfg文件中,app重新启动并且配置过程结束了。

我想在spring bean中拥有所有配置细节,但我发现我无法以编程方式真正更改它们(一种解决方案是修改文件'out of spring'并在病房后重新加载应用程序上下文 - 那是好方法吗?)。 另一个是在WEB-INF中存储xml文件,并在从用户收集数据后保存数据,但是如何将数据从非bean文件加载到应用程序上下文中?

任何建议都适用!

2 个答案:

答案 0 :(得分:2)

您可以将这些值保留在属性文件中。您可以在spring bean中使用属性文件值 您还可以使用通过UI接受的用户输入更新属性文件中的值。

答案 1 :(得分:0)

您可以通过ApplicationContext类及其子类访问ever bean。从这里开始,你可以在所有的bean上调用getter和setter来获取proeprties;但值得注意的是,应用程序上下文已经创建,BeanFactory也是如此,因此您将错过一些生命周期步骤。

在您自己的bean上设置与生命周期无关的属性肯定是可行的,但我不建议在设置上下文后尝试更改“基础架构”bean的属性(例如事务管理,包扫描)起来并开始了。

如果您的目标用户是天真的用户,也许您可​​以提供修改属性文件的功能,然后以编程方式重新加载Web应用程序,并让您的Spring上下文使用PropertyPlaceholderConfigurer或{{1加载其属性}}

如果您的目标用户是“内部”精通IT的用户,那么您也可以使用JMX,它允许您使用PropertyOverrideConfigurer或类似内容更改上下文中每个bean的属性。 / p>