如何在Guice中传递构造函数参数

时间:2013-02-06 20:37:09

标签: java guice

我有一个Swing课程:

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”?

非常感谢

1 个答案:

答案 0 :(得分: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"));