如何用guice注入资源

时间:2010-09-08 09:36:00

标签: java resources guice

我有一个类,由guice注入,这个类构造函数调用super,资源由class.getResource(..)

加载
@SuppressWarnings("serial")
public class CleanAction extends AbstractAction {

    private final JTable table;
    private final PowderTableModel tableModel;

    @Inject
    public CleanAction(@Named("data") JTable table, PowderTableModel tableModel) {
        super("Clean", new ImageIcon(CleanAction.class.getResource("/icons/table.png")));
        this.table = table;
        this.tableModel = tableModel;
    }

...
}

它在测试中工作正常,但在guice初始化期间,CleanAction.class.getResource(“icons / table.png”)的结果为null,因此它因NullPointerException而失败。

有没有任何guice方式来注入资源?

2 个答案:

答案 0 :(得分:2)

要回答你的问题“有没有任何guice方式来注入资源?”,我会说“不,不是开箱即用”。

但是,我已经在Guts-GUI框架(Apache License 2.0)中基于Guice实现了一项ResourceInjector服务。请随意查看它,看看我如何使用Guice功能确保在Guice注入时注入资源。

这比你描述的更为通用(在“资源”中我包含JLabel的文字,JButton ...)

但请注意,自动资源注入是一项复杂的业务(许多不同类型的资源......)

答案 1 :(得分:1)

为什么需要guice来注入资源?在正常工作期间,您的文件看起来不在类路径中。它只在测试期间在类路径中。当你正常运行时,尝试将它添加到类路径,而不是测试。

你正在使用maven吗?也许你的文件在src/test/resources,而它应该在src/main/resources