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

发布于 2025-01-05 15:14:23 字数 539 浏览 1 评论 0原文

我正在使用 Tomcat 6.0.33 和 Java 6。我有这个 servlet ...

public class SaveXmlServlet extends HttpServlet {

private CacheService cacheService;

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

我怎样才能重新设计我的 servlet ...

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

?我没有使用(或允许使用)Spring 或 Guice 等框架。感谢您对重构此内容的任何想法。谢谢,-戴夫

I'm using Tomcat 6.0.33 with Java 6. I have this servlet ...

public class SaveXmlServlet extends HttpServlet {

private CacheService cacheService;

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

How can I redesign my servlet to ...

  1. Take advantage of dependency injection so that a mocking framework like mockito can inject its own "cacheService" implementation
  2. Guarantee that there is only one instance of cacheservice in my jvm. Right now the line "CacheServiceLocator.cacheService()" guarantees this.

? I'm not using (or allowed to use) frameworks like Spring or Guice. Grateful for any thoughts on refactoring this. Thanks, - Dave

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦纸 2025-01-12 15:14:23

有一些选择,尽管我建议惩罚那些不“让”你使用框架的人。两个快手;我确信还有其他人。我会先走打脸路线。

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

Servlet 初始化参数或 JNDI 资源提供的类名可用于创建缓存定位器的实例。为其提供设置器允许一个单元/等。测试将其设置在班级上。

There are a few options, although I recommend smacking someone for not "letting" you use a framework. Two quickies; I'm sure there are others. I'd go the smacking route first.

You can mock static classes using a combination of EasyMock/Mockito and, say, PowerMock. Technically you don't need to change anything at all to get the in-test behavior you want.

A class name provided by a servlet init parameter or JNDI resource could be used to create an instance of the cache locator. Providing a setter for the same allows a unit/etc. test to set it on the class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文