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

Java 应用程序中的每个类应该如何检索Spring应用程序上下文?,java,spring,Java,Spring,应用程序中的每个类应该如何检索Spring应用程序上下文?或者,用另一种方式说,一个应用程序应该调用多少次新的类路径XMLApplicationContext(“applicationContext.xml”)?通常一个类不需要应用程序上下文,但它需要Spring注入的一些对象。这是在applicationContext中配置的 由于这样的应用程序通常只调用一次new ClassPathXmlApplicationContext(“applicationContext.xml”)。使用依赖项注入

应用程序中的每个类应该如何检索Spring应用程序上下文?或者,用另一种方式说,一个应用程序应该调用多少次新的类路径XMLApplicationContext(“applicationContext.xml”)?

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


由于这样的应用程序通常只调用一次
new ClassPathXmlApplicationContext(“applicationContext.xml”)

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


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

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

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

一次

实际上,您应该让Spring来完成繁重的工作并构建/配置类,而不是反过来

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


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

实现
MessageSourceAware
以获取MessageSource有什么问题?我为一个应用程序做过这样的工作,它总是工作得很好。没有什么严重的错误,但是为什么要实现一个接口,而你需要做的只是传递一个引用?