Я хотел бы использовать HK2 DI для автоматического добавления нового экземпляра класса в зависимости от пользователя, вошедшего в мой API на Джерси.
Пользователь вошел в систему с классом AuthenticationFilter, и я могу найти его в @Context SecurityContext во всех моих конечных точках.
Дело в том, что у меня есть класс DAO, для которого требуется информация о пользователе. Это просто схема, по которой я должен выполнять запросы к базе данных.
Итак, конструктор моего Дао выглядит следующим образом:
public UserDao(String schemaCompte) {
super(schemaCompte);
}
Кажется, что решение состоит в том, чтобы использовать Фабрику для создания экземпляра моего Дао с HK2, поэтому я попытался создать такой:
public class UserDaoFactory implements Factory<UserDao> {
@Context SecurityContext securityContext;
@Override
public UserDao provide() {
User userPrincipal = (User) securityContext.getUserPrincipal();
return new UserDao(userPrincipal.getCode());
}
@Override
public void dispose(UserDao userDao) {
}
}
И привязка выглядит так:
bindFactory(UserDaoFactory.class).to(UserDao.class)
И реализация:
@Inject
public UserSvc(UserDao userDao) {
...
}
Но эта фабрика вызывается слишком рано в жизненном цикле моего приложенияи SecurityContext по-прежнему пуст.
Итак, насколько я понимаю, решение для того, чтобы это выполнялось во время выполнения, состояло бы в том, чтобы привязать Factory как прокси-сервер:
bindFactory(UserDaoFactory.class).proxy(true).to(UserDao.class)
Но когда я это делаю, я получаю среду выполненияисключение:
java.lang.RuntimeException: java.lang.InstantiationException: com.metier.user.UserDao_$$_jvst5c_0
Если у кого-то появилась идея, я пробовал так много вещей, и мне совершенно не повезло