Java 如何重构servlet以利用依赖注入?

Java 如何重构servlet以利用依赖注入?,java,servlets,dependency-injection,Java,Servlets,Dependency Injection,我将Tomcat6.0.33与Java6一起使用。我有这个servlet public class SaveXmlServlet extends HttpServlet { private CacheService cacheService; public void init(ServletConfig config) throws ServletException { cacheService = CacheServiceLocator.cacheService(); } //

我将Tomcat6.0.33与Java6一起使用。我有这个servlet

public class SaveXmlServlet extends HttpServlet {

private CacheService cacheService;

public void init(ServletConfig config) throws ServletException {
    cacheService = CacheServiceLocator.cacheService();
}   // init
如何重新设计servlet以

  • 利用依赖注入,以便像mockito这样的模拟框架可以注入自己的“cacheService”实现
  • 确保jvm中只有一个cacheservice实例。现在,“CacheServiceLocator.cacheService()”一行就保证了这一点

  • ??我不使用(或允许使用)像Spring或Guice这样的框架。感谢您对重构此文件的任何想法。谢谢,-Dave

    有几个选择,不过我建议你批评某人不“让”你使用框架。两个快速;我肯定还有其他人。我会先去打屁股的路线

    您可以使用EasyMock/Mockito和PowerMock的组合来模拟静态类。从技术上讲,你根本不需要改变任何东西来获得你想要的测试行为


    servlet init参数或JNDI资源提供的类名可用于创建缓存定位器的实例。提供相同的setter允许单元/etc.测试在类上设置它。

    有几个选项,尽管我建议批评某人不“允许”你使用框架。两个快速;我肯定还有其他人。我会先去打屁股的路线

    您可以使用EasyMock/Mockito和PowerMock的组合来模拟静态类。从技术上讲,你根本不需要改变任何东西来获得你想要的测试行为


    servlet init参数或JNDI资源提供的类名可用于创建缓存定位器的实例。提供相同的setter允许单元/等测试在类上设置它。

    “我不使用(或不允许使用)Spring或Guice之类的框架。”好吧,自己重新设计一个。它们是开源的,因此您可以获得一些见解。但是重新发明轮子有什么意义?我会集中精力解决“我不被允许”的问题。这比你现在的问题要大得多。但是技术问题要容易得多!“我不使用(或不允许使用)像Spring或Guice这样的框架。”好吧,自己重新设计一个。它们是开源的,因此您可以获得一些见解。但是重新发明轮子有什么意义?我会集中精力解决“我不被允许”的问题。这比你现在的问题要大得多。但是技术问题要容易得多!关于“servlet init参数或JNDI资源提供的类名可用于创建缓存定位器的实例”,您能否提供一个代码示例b/c我还没有看到它。此外,我不关心CacheServiceLocator本身,只要我可以控制如何在JUnit测试和普通应用程序中设置“cacheService”成员字段。谢谢,-@Dave。。。不确定我还能添加什么,使用字符串类名在“实时”系统中创建实现的新实例,在测试中使用setter。哦,现在清楚了。。。我忘记了通过class.forName方法(或其他方法)使用类实例化。非常感谢您的解决方案,-@Dave啊,明白了。没问题;希望能有帮助。或者至少不会让事情变得更糟;)关于“servlet init参数或JNDI资源提供的类名可用于创建缓存定位器的实例”,您能否提供一个代码示例b/c我还没有看到它。此外,我不关心CacheServiceLocator本身,只要我可以控制如何在JUnit测试和普通应用程序中设置“cacheService”成员字段。谢谢,-@Dave。。。不确定我还能添加什么,使用字符串类名在“实时”系统中创建实现的新实例,在测试中使用setter。哦,现在清楚了。。。我忘记了通过class.forName方法(或其他方法)使用类实例化。非常感谢您的解决方案,-@Dave啊,明白了。没问题;希望能有帮助。或者至少不会让事情变得更糟;)