在spring mvc中的应用程序上下文中设置对象

时间:2013-04-25 10:22:38

标签: java spring spring-mvc applicationcontext

我有一个实用工具类,我想在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;
    }
}

这种方法是正确的还是有更好的方法呢?

2 个答案:

答案 0 :(得分:3)

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

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

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

如果你能以bean的形式表达这些依赖关系(util是一个bean,它有依赖bean注入其中,而需要util的bean都注入了util),Spring将确保util的所有依赖关系都是首先初始化,然后初始化util,然后将它注入需要util的类。

您不应该尝试在初始化的上下文中添加内容。它不可能。

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

  1. ApplicationContextAware实施中,修改setApplicationContext方法。从上下文中获取先前配置的util bean。

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

  3. 希望这有帮助。

答案 1 :(得分:1)

您可以在方法上使用@postconstruct注释,在应用程序启动后立即执行业务逻辑。可以使用config中的占位符和java字段上的@Value注释来简单地注入属性。