#java #dependency-injection #guice #guice-servlet
#java #внедрение зависимостей #guice #guice-сервлет
Вопрос:
У меня есть 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
Пожалуйста, помогите решить проблему.
Комментарии:
1. Вы правильно зарегистрировали свой модуль?
Guice.createInjector(new ServletModule(), new YourDaoModule())
?
Ответ №1:
Мы можем получить экземпляр UserDao следующим образом
injector.getInstance(UserDao.class);