В моем случае мне нужно разработать специальную аннотацию, с помощью которой я могу создать экземпляр реализации 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
HK2 Factory с типом интерфейса и InjectionResolver ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1762988714
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 какие-либо средства для этого?
[b]ОТРЕДАКТИРОВАНО[/b]
У меня может быть несколько реализаций интерфейса 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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/33037092/hk2-factory-with-interface-type-and-injectionresolver[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия