我需要从非bean对象获取spring应用程序上下文。在SO的另一个线程中,可接受的答案建议使用单例来获取应用程序上下文。
Getting Spring Application Context
但是使用单例使我的代码更易于耦合和测试,这是许多线程中讨论的常见问题(例如What is so bad about Singletons)
问题是,有没有一种优雅的方法可以在不使用单例的情况下从非bean对象获取应用程序上下文?
最佳答案
总是存在引导问题。对于Web应用程序,通常使用外部servlet过滤器来处理这种情况。
如果不是网络应用程序,则无法解决某种外部单例或 bootstrap 的问题。但;在这里使用单例应该只影响该单个 bootstrap 类的可测试性。在您的代码中,实际上应该只有很少的地方需要以任何显式的方式引用容器。因此,它并没有真正显着增加耦合。
或者换句话说,实际上应该只有很少的非bean对象需要访问spring容器。如果不是这种情况,则可能不是最佳使用spring。并且大多数/所有需要容器的人可能应该只实现BeanFactoryAware或ApplicationContextAware
关于design-patterns - 在不使用Singleton的情况下从非bean对象获取Spring Application上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/475785/