Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлеты и Dependency Injection / 8 сообщений из 8, страница 1 из 1
22.01.2014, 01:31
    #38533851
output
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты и Dependency Injection
Добрый день.
Подскажите пожалуйста
Имеется слой доступа к базе данных и слой сервисов. Не могу понять как в сервлет в сеттер установить имплементацию того или иного сервиса, подскажите пожалуйста. (только спринги и т.д. не предлагать :) )


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class TestServlet extends HttpServlet {
    private TestService testService;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // ....
    }

    public void setTestService(TestServlet testService) {
        this.testService = testService;
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public interface TestService {
    void test();
}

public class TestServiceImpl impliments TestService {
    @Override
    public void test() {
             //....
    }
}



и есть что-то типа фабрики, так же не знаю насколько этот момент верный, подскажите если делаю не так.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class ServiceFactory {
    private TestService testService;

    public TestService getTestService() {
        if (testService == null) {
            TestServiceImpl testService = new TestServiceImpl();
            testService.setOthetTestService(getOtherTestService());
            this.testService = testService;
        }
        return userService;
    }
}





Вообщем идея понять что такое dependency injection, а так же сервлеты (поэтому просьба без всяких фрейморков). Заранее благодарю.
...
Рейтинг: 0 / 0
22.01.2014, 02:46
    #38533865
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты и Dependency Injection
output,

у вас в первом исходнике точно setTestService(TestServlet testService)? Может setTestService(TestService testService) ?

идея DI в том, чтобы кто-то задавал значения всех нужных полей у обьектов. Профит от этого в том, что если нужны какие-то циклические зависимости, то при создании руками ссылки не всегда просто "протащить" от места где оно создается в место, где оно тоже нужно.

Спринг - рабочая, но довольно монстроидальная либа, с непонятными стактрейсами в случае ошибок. ИМХО. Я делал приложеньице и накатал свою имплементацию. И формат попроще и вся логика - один класс, вместо нескольких jar-ов по мегабайту.
...
Рейтинг: 0 / 0
22.01.2014, 08:50
    #38533905
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты и Dependency Injection
chabapokПрофит от этого в том, что если нужны какие-то циклические зависимости, то при создании руками ссылки не всегда просто "протащить" от места где оно создается в место, где оно тоже нужно.Профит DI заключается совершенно не в этом. Любую зависимость всегда можно протащить "руками" куда угодно. Если бы это было невозможно, то как по-вашему тогда бы это делал спринг?
Смысл DI - упростить работу с зависимостями, их поддержку, и тестируемость.

chabapokСпринг - рабочая, но довольно монстроидальная либа, с непонятными стактрейсами в случае ошибок. ИМХО. Я делал приложеньице и накатал свою имплементацию. И формат попроще и вся логика - один класс, вместо нескольких jar-ов по мегабайту.Спринг - достаточно легкая либа. Среди всех библиотек, у Спринга одни из самых понятных сообщений об ошибках. Они всегда четко объясняют причину той или иной проблемы.
...
Рейтинг: 0 / 0
22.01.2014, 08:53
    #38533906
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты и Dependency Injection
output ,
Вариантов несколько:
1) Создать сервис в момент создания сервлета, то есть в init().
2) Создать сервис в момент создания контекста, то есть в ServletContextListener, и запихнуть его в ServletContext.setAttribute(). Далее вытаскиваеть его из ServletRequest.getServletContext.getAttribute().
...
Рейтинг: 0 / 0
22.01.2014, 09:54
    #38533946
output
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты и Dependency Injection
chabapokoutput,
у вас в первом исходнике точно setTestService(TestServlet testService)? Может setTestService(TestService testService) ?

Да, точно, опечатался.
chabapokЯ делал приложеньице и накатал свою имплементацию. И формат попроще и вся логика - один класс, вместо нескольких jar-ов по мегабайту.

А можно посмотреть на исходники Вашего приложения?

cdtyjvoutput,
Вариантов несколько:
1) Создать сервис в момент создания сервлета, то есть в init().
2) Создать сервис в момент создания контекста, то есть в ServletContextListener, и запихнуть его в ServletContext.setAttribute(). Далее вытаскиваеть его из ServletRequest.getServletContext.getAttribute().


Благодарю, у меня был вариант получать сервисы из сервлет контекста, но думал что так не верно.
...
Рейтинг: 0 / 0
23.01.2014, 02:46
    #38535090
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты и Dependency Injection
cdtyjvchabapokПрофит от этого в том, что если нужны какие-то циклические зависимости, то при создании руками ссылки не всегда просто "протащить" от места где оно создается в место, где оно тоже нужно.Профит DI заключается совершенно не в этом. Любую зависимость всегда можно протащить "руками" куда угодно. Если бы это было невозможно, то как по-вашему тогда бы это делал спринг?
Смысл DI - упростить работу с зависимостями, их поддержку, и тестируемость.


Давайте сравним мое "не всегда просто" и "всегда можно протащить".
Вроде эти утверждения даже не конфликтуют.
Т.е. да, всегда можно протащить, но писанины много. Будет в итоге что-типа:

myobj = other.obj.left.get(10).get(5).right.obj.getObj().getObject().get(8)

при этом само other тоже может доставаться из большой жопы.

outputА можно посмотреть на исходники Вашего приложения?
К сожалению, оно закрытое, и хотя военного в нем нет ничего, оно из серии "если вы это увидите, вас прийдется убить".

Просто спринг более гибок, но конфиг это раздувает. По моему мнению, для многих задач это избыточно. Достаточно через рефлекию мэппить из xml аттрибуты в переменные. Опять же, через рефлексию смотрится тип переменной и по нему решается как стринговый аттрибут приводить к этому типу.
...
Рейтинг: 0 / 0
23.01.2014, 03:51
    #38535101
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты и Dependency Injection
chabapok
Просто спринг более гибок, но конфиг это раздувает. По моему мнению, для многих задач это избыточно. Достаточно через рефлекию мэппить из xml аттрибуты в переменные. Опять же, через рефлексию смотрится тип переменной и по нему решается как стринговый аттрибут приводить к этому типу.

А Guice чем не устроил?
...
Рейтинг: 0 / 0
23.01.2014, 16:30
    #38535772
chabapok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сервлеты и Dependency Injection
Да как-то не приглянулась документация. Хотя конечно можно было скачать попробовать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлеты и Dependency Injection / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]