应用程序中的每个类应如何检索Spring应用程序上下文?

时间:2010-05-27 18:30:06

标签: java spring

应用程序中的每个类应如何检索Spring应用程序上下文?或者,换句话说,应用程序应该调用new ClassPathXmlApplicationContext("applicationContext.xml")多少次?

4 个答案:

答案 0 :(得分:5)

通常一个类不需要应用程序上下文,但它需要一些Spring注入的对象。这是在applicationContext中配置的。

因为这样的应用程序通常只调用new ClassPathXmlApplicationContext("applicationContext.xml")一次。

答案 1 :(得分:3)

通过依赖注入,您通常不必这样做。但是,如果您的类确实需要了解应用程序上下文,请实现ApplicationContextAware接口。 Spring将自动调用该接口中定义的setApplicationContext方法,为您的类提供应用程序上下文。

请注意,如果您尝试访问文件系统资源,则应使用ResourceLoaderAware。如果要访问消息源,则不要实现接口;相反,注入对MessageSource bean的引用。

答案 2 :(得分:2)

我认为你应该从你的另一个问题here的答案中得到建议。实现ApplicationContextAware或ServletContextAware(如果您在servlet容器中)是获取上下文的最佳方式。

查看spring如何处理依赖注入或控制反转。

答案 3 :(得分:2)

实际上你应该让Spring做繁重的工作并构建/配置类而不是相反。

整个想法是所有类都可以构建而无需为外部世界调用依赖项,这些依赖项是由Spring框架“神奇地”提供的。

这种方法的发明是为了摆脱您提到的ServiceLocator模式,即获取对象的引用以获得所需的依赖关系,ala JNDI。