Лучший / самый чистый способ внедрения зависимостей в сервлеты без каких-либо структур - PullRequest
2 голосов
/ 05 мая 2011

Каков наилучший способ внедрения зависимостей в сервлеты, если вы не хотите использовать какие-либо платформы DI? Должен ли я положить их в ServletContext в ServletContextListener?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Чтобы внедрить что-то в сервлеты, вам нужно получить экземпляры сервлета в другом классе.И вы не можете этого сделать, потому что метод getServlet(name) устарел (и не работает).

Таким образом, каждый сервлет должен будет зарегистрировать себя вручную в контексте.В методе init() каждого сервлета вы можете добавить себя в коллекцию в контексте сервлета:

((List<HttpServlet>) servletContext.getAttribute("servlets")).add(this);

Затем в ServletContextListener вы можете зациклить все зарегистрированные сервлеты и вызвать некоторые сеттеры или пользователяотражение, для внешней установки зависимостей.

Но ... это кажется слишком сложным, так что вы можете придерживаться оператора new здесь и там.

2 голосов
/ 05 мая 2011

Да.Вы можете инициализировать их в ServletContextListener (если вам нужно их предварительно инициализировать), а затем поместить их в ServletContext для доступа всех ваших сервлетов.

Вероятно, лучше хранить объекты по их классуимя, поэтому поиск является типобезопасным.

Foo foo = servletContext.getAttribute(Foo.class.getName());
...