0

I have a utility class which I want to initialize when the application starts in Spring MVC. So I am implementing InitializingBean. Now I have to create an object for the same and save it in Application scope so that I can access the same instance everywhere. But I am not able to get hold of this.

Here is my try:

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;
    }
}

Is this approach correct or there is a better way to do that?

4

2 回答 2

3

我认为您需要稍微简化一下。

您希望实用程序类在加载应用程序上下文后初始化,但您还希望实用程序类位于应用程序上下文中?

似乎 util 类在应用程序上下文中配置了一些依赖对象,而 util 类又是应用程序上下文中某些类的依赖项。

如果你可以用bean的形式表达这些依赖(util是一个bean,它的依赖bean注入了它,需要util的bean也注入了util),Spring会确保util的所有依赖都先初始化,然后 util 被初始化,然后注入到需要 util 的类中。

您不应该尝试将某些内容添加到初始化的上下文中。这是不可能的。

如果不能将 util 及其依赖项表示为 bean,也可以采用这种方法: 1. 将 util 配置为应用程序上下文中的 bean,添加一个什么都不做的默认构造函数。所以这个对象将被创建,但在加载弹簧上下文时不会被初始化。

  1. ApplicationContextAware您拥有的实现中,修改setApplicationContext方法。从上下文中获取您之前配置的 util bean。

  2. 您现在可以初始化(执行一些您想要执行的代码)util 实例,只需确保不要尝试将 bean 重新分配给其他 util 实例。

希望这可以帮助。

于 2013-04-25T20:18:36.420 回答
1

您可以@postconstruct在应用程序初始化后立即使用方法上的注释来执行业务逻辑。并且可以使用配置中的占位符和@Valuejava 字段上的注释来简单地注入属性。

于 2013-04-25T12:18:02.747 回答