HK2 Factory с типом интерфейса и InjectionResolverJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 HK2 Factory с типом интерфейса и InjectionResolver

Сообщение Anonymous »

В моем случае мне нужно разработать специальную аннотацию, с помощью которой я могу создать экземпляр реализации DAO.
Итак, у меня есть интерфейс:
public interface IDAO{
public void method1();
public void method2();
}

и реализация конфигурации ресурса:
public class JAXRSConfig extends ResourceConfig {

public JAXRSConfig() {
register(new AbstractBinder() {
@Override
protected void configure() {
/*Factory Classes Binding*/
bindFactory(DaoFactory.class).to(IDAO.class).in(RequestScoped.class);

/*Injection Resolver Binding*/
bind(CustomContextInjectionResolver.class).to(new TypeLiteral(){}).in(Singleton.class);
}
});
}

Я придерживаюсь заводской реализации:
public class DaoFactory implements Factory{

private final HttpServletRequest request;

@Inject
public DaoFactory(HttpServletRequest request) {
this.request = request;
}

@Override
public IDAO provide() {

IDAO dao = null;
try {

???????????

} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return dao;
}

@Override
public void dispose( IDAO mud) {
}
}

И вот, конечно, моя реализация IDAO:
public class DAOImplementation implements IDAO {
public void method1(){
//do some stuff
}

public void method2(){
//do some stuff
}

public MyEntity getEntity(){
//get my entity
}
}

Результат, который я хочу получить:
@Path("/myResource")
public class myService(){

@CustomContext
DAOImplementation myDao;

public String myService(){
MyEntity entity = myDao.getEntity();
}

}

Есть ли способ подключить фабрику к преобразователю инъекций так, чтобы я мог получить реальную реализацию? Предоставляет ли hk2 какие-либо средства для этого?
ОТРЕДАКТИРОВАНО
У меня может быть несколько реализаций интерфейса IDAO... например, если у меня есть:
public class DAOImplementation2 implements IDAO {
public void method1(){
//do some stuff
}

public void method2(){
//do some stuff
}

public MyEntity2 getEntity2(){
//get my entity
}
}

Я смогу получить вторую реализацию следующим образом:
@Path("/myResource")
public class myService(){

@CustomContext
DAOImplementation myDao;

@CustomContext
DAOImplementation2 mySecondDao;

public String myService(){
MyEntity entity = myDao.getEntity();
MyEntity2 entity = mySecondDao.getEntity2();

}

}


Подробнее здесь: https://stackoverflow.com/questions/330 ... onresolver
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»