Как мне реорганизовать мой сервлет, чтобы воспользоваться преимуществами внедрения зависимостей? - PullRequest
1 голос
/ 14 февраля 2012

Я использую Tomcat 6.0.33 с Java 6. У меня есть этот сервлет ...

public class SaveXmlServlet extends HttpServlet {

private CacheService cacheService;

public void init(ServletConfig config) throws ServletException {
    cacheService = CacheServiceLocator.cacheService();
}   // init

Как мне изменить мой сервлет до ...

  1. Воспользуйтесь преимуществом внедрения зависимостей, чтобы такая среда разработки, как mockito, могла внедрить свою собственную реализацию «cacheService»
  2. Гарантия того, что в моем jvm есть только один экземпляр cacheserviceПрямо сейчас строка "CacheServiceLocator.cacheService ()" гарантирует это.

?Я не использую (или не могу использовать) фреймворки, такие как Spring или Guice.Благодарен за любые мысли о рефакторинге этого.Спасибо, Дэйв

1 Ответ

1 голос
/ 14 февраля 2012

Есть несколько вариантов, хотя я рекомендую кого-то шлепнуть за то, что вы не «разрешили» использовать фреймворк.Два контакта;Я уверен, что есть другие.Сначала я пошёл бы по порочному пути.

Вы можете издеваться над статическими классами, используя комбинацию EasyMock / Mockito и, скажем, PowerMock.Технически вам вообще не нужно ничего менять, чтобы получить желаемое поведение в тесте.

Имя класса, предоставленное параметром init сервлета или ресурсом JNDI, можно использовать для создания экземпляра локатора кэша.,Предоставление сеттера для того же позволяет юнит / и т.д.тест, чтобы установить его в классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...