应用程序中的每个类应如何检索Spring应用程序上下文?或者,换句话说,应用程序应该调用new ClassPathXmlApplicationContext("applicationContext.xml")
多少次?
答案 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。