【发布时间】:2012-03-10 20:53:26
【问题描述】:
我是 Spring 新手,我已经阅读了许多关于如何注入 bean 的指南。奇怪的是,在我看到的每个示例中,他们在类主方法中使用 getBean (不是我需要的)。此外,我还阅读了许多与如何不使用 getBean 相关的论坛和问题,但我仍然无法为我的应用找出最佳方法。
我正在重构一个高度耦合且没有设计模式的 Web 应用程序。每个业务类都有一个相应的 DAO 类,每个 DAO 类都扩展了一个超级 DAO,它处理连接和其他东西。这里的问题是,每个 DAO 在构造函数中都需要一些从业务类传递的数据库配置参数。我想要做的是将这些参数放在一个 DBConfig bean 中,并将它们注入每个 DAO 中,这样我就可以简单地从每个业务类创建 DAO 对象,例如: dao =新的 myDAO()。
如何“自动”将 DBConfig bean 注入每个 DAO?我应该在超级 DAO 中使用 getBean 吗?
【问题讨论】:
-
如果你在做new MyDAO(),那么你就不让Spring构造对象,所以Spring不能向对象注入任何东西。您需要在业务类实例中注入 DAO。
-
@JB Nizet 这是我的困境的一部分,如果我在业务类中注入 DAO,我应该如何构建业务类?业务类也是由整个应用程序中的新运算符构建的。
-
将业务类实例注入您的 UI 控制器或全局 ServiceRegistry 对象。有时,除非您使用支持 Spring 的 UI 框架,否则您将不得不调用
getBean()。但是在最顶层而不是在 DAO 层中这样做会好得多。您可以只使用一次来获取一个ServiceRegistry对象,该对象注入了对所有业务类实例的引用,这些实例本身也注入了 DAO 实例。 -
我认为@JBNizet 以前的 cmets 是最好的答案。
标签: spring inversion-of-control ioc-container