【问题标题】:How to get TypeLiteral binding or can say instance from injector [Google Guice]如何获取 TypeLiteral 绑定或可以说来自注入器的实例 [Google Guice]
【发布时间】:2020-10-28 06:27:13
【问题描述】:

我有Dao<T> 接口,它由BaseDao<T> 类和BaseDao<T> 实现,后来被UserDao 类等许多子类扩展。

interface Dao<T>{}

abstract class BaseDao<T> implements Dao<T>{}

class UserDao extends BaseDao<User>{}

下面是guice绑定

bind(new TypeLiteral<Dao<User>>() {
        }).annotatedWith(Names.named("UserDao")).toProvider(UserDaoProvider.class);

提供者看起来像..

public class UserDaoProvider implements Provider<UserDao> {

    @Override
    public UserDao get() {
        return new UserDao();
    }

}

现在我正在尝试从 guice 注射器中获取它

injector.getInstance(Key.get(new TypeLiteral<Dao<User>>() {
                }, Names.named("UserDao")));

但我收到null

请帮助解决问题。

【问题讨论】:

  • 您是否正确注册了您的模块? Guice.createInjector(new ServletModule(), new YourDaoModule())?

标签: java dependency-injection guice guice-servlet


【解决方案1】:

我们可以如下获取UserDao的实例

injector.getInstance(UserDao.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多