0

在应用程序深处访问不受 Spring 管理的 Spring 组件的最佳方式(或选项)是什么?

例如,假设我有一些 @Controllers。通过 Spring 不管理的 POJO 的一些抽象层,这些 @Controllers 可能最终使用需要注入 @Service 的 POJO。

一种选择是将所有层都放入弹簧组件中,但这似乎是我在破解我的设计以强制弹簧帮助我。如果我必须@Autowire 一切,我有一些复杂的事情将不会那么干净。另一种选择可能是在低级类中手动注入组件,但我不确定这是否可行或正确的解决方案。

4

1 回答 1

2

本着回答原始问题的精神,我会说你可以让你的低级非spring类实现ApplicationContextAware来访问ApplicationContext,并使用ApplicationContext来访问你想要的任何spring bean。(谷歌搜索“spring application context aware”找到示例代码

然而,本着在这里解决大局的精神,这个问题从一开始就存在一些问题。一方面,听起来您想要将高级组件注入到低级组件中 - 通常您希望您的设计是相反的。此外,正如已经指出的那样,彼此“远离”的事物可能不应该相互依赖。在这种情况下,考虑到这些要点来改进设计将对您有所帮助。

我不会回避将所有层制作成 Spring 组件以充分利用您已经在使用的框架。如果您想使用 DI 框架,通常使用它来构建您的整个应用程序会很有帮助。我认为一个干净的设计,自始至终使用@Inject(Java EE 标准),并使用带有范围控制的 DI 框架连接实际上比必须“新”所有东西更干净。

于 2012-09-21T15:36:21.200 回答