我有一个实用工具类,我想在Spring MVC中启动应用程序时初始化它。所以我正在实施InitializingBean
。现在我必须为它创建一个对象并将其保存在Application范围中,这样我就可以在任何地方访问同一个实例。但我无法理解这一点。
这是我的尝试:
public class DashboardInitializer implements InitializingBean, ApplicationContextAware {
private ApplicationContext mApplication;
@Override
public void afterPropertiesSet() throws Exception {
initializeConfigurationUtil();
ConfigurationUtil util = ConfigurationUtil.getInstance();
/* Save the util to application scope */
}
@Override
public void setApplicationContext(ApplicationContext pApplication) throws BeansException {
this.mApplication = pApplication;
}
}
这种方法是正确的还是有更好的方法呢?
答案 0 :(得分:3)
我认为你需要稍微简化一下。
您希望在加载应用程序上下文后初始化实用程序类,但是您还希望您的util类位于应用程序上下文中吗?
似乎util类在应用程序上下文中配置了一些依赖项对象,而util类又是应用程序上下文中某些类的依赖项。
如果你能以bean的形式表达这些依赖关系(util是一个bean,它有依赖bean注入其中,而需要util的bean都注入了util),Spring将确保util的所有依赖关系都是首先初始化,然后初始化util,然后将它注入需要util的类。
您不应该尝试在初始化的上下文中添加内容。它不可能。
如果你不能将util及其依赖项表示为bean,你也可以采用这种方法: 1.在应用程序上下文中将util配置为bean,添加一个不执行任何操作的默认构造函数。所以这个对象将被创建,但是在加载spring上下文时不会被初始化。
在ApplicationContextAware
实施中,修改setApplicationContext
方法。从上下文中获取先前配置的util bean。
您现在可以初始化(执行一些您想要执行的代码)util实例,只是确保您不要尝试将bean重新分配给util的其他实例。
希望这有帮助。
答案 1 :(得分:1)
您可以在方法上使用@postconstruct
注释,在应用程序启动后立即执行业务逻辑。可以使用config中的占位符和java字段上的@Value
注释来简单地注入属性。