1

我有一个摇摆班:

public class PopUpContextMenu extends JPopupMenu {
    public PopUpContextMenu() {
        super();

        JMenuItem loginMenuItem = new LoginMenuItem("Login");
        JMenuItem logoutMenuItem = new LogoutMenuItem("Logout");
        add(loginMenuItem);
        add(logoutMenuItem);
    }
}

我想将其更改为使用 Guice,以便可以删除两个“新”语句。我想要类似的东西:

public class PopUpContextMenu extends JPopupMenu {
    @Inject
    public PopUpContextMenu(JMenuItem loginMenuItem, JMenuItem logoutMenuItem) {
        super();
        add(loginMenuItem);
        add(logoutMenuItem);
    }
}

我的问题是如何在 Guice 中配置绑定,以便在构造 loginMenuItem 时传递字符串“Login”并在构造 logoutMenuItem 时传递字符串“Logout”?

非常感谢

4

1 回答 1

1

您可以@Named为此使用注释:

在你的课堂上:

@Inject
@Named("LOGIN")
JMenuItem loginMenuItem;

@Inject
@Named("LOGOUT")
JMenuItem logoutMenuItem

那么在你的 Guice 模块 configure() 方法中你可以:

bind(JMenuItem.class).annotatedWith(Names.named("LOGIN")).toInstance(new LoginMenuItem("Login"));
bind(JMenuItem.class).annotatedWith(Names.named("LOGOUT")).toInstance(new LoginMenuItem("Logout"));
于 2013-02-06T20:50:20.733 回答