我有一个 Swing 应用程序,我想将它从意大利面条转换为使用 Guice 的依赖注入。使用 Guice 提供配置和任务队列等服务非常棒,但我现在开始使用应用程序的 GUI 并且不确定如何继续。
该应用程序基本上是JFrame
一个在JTabbedPane
. 每个选项卡都是一个单独的JPanel
子类,它列出了各种组件并需要服务来在按下某些按钮时执行操作。
在当前的应用程序中,这看起来有点像这样:
@Inject
public MainFrame(SomeService service, Executor ex, Configuration config) {
tabsPane = new JTabbedPane();
// Create the panels for each tab and add them to the tabbedpane
somePanel = new SomeTabPanel(service, ex, config);
tabsPane.addTab("Panel 1", somePanel);
someOtherPanel = new SomeOtherTabPanel(service, ex, config);
tabsPane.addTab("Panel 2", someOtherPanel);
... do more stuff
}
显然,这并不完全遵循 DI 最佳实践。我不想@Inject
使用选项卡,因为这会给我一个带有几十个参数的构造函数。我确实想使用 Guice 将所需的依赖项注入到我需要的任何选项卡对象中,而不必将所有这些依赖项传递给选项卡构造函数。
选项卡对象的所有依赖项都是我Module
知道的服务,所以基本上我想做的就是向 Guice 询问所需的对象并为我构建它们。