如何使容器级别的遗留Web应用程序能够将bean自动装配到Servlet中?

时间:2010-03-17 15:06:12

标签: spring servlets web-applications autowired

我们有一个遗留的Web应用程序(不是基于Spring的),并且正在寻找最佳实践,以便将一些较新的Spring配置(线程安全)服务bean自动装配到几个传统servlet中的实例变量中。将每个servlet重写为Spring MVC都超出了范围。为了测试性,我们不希望Servlet中的任何Spring特定bean查找代码按名称或类似方式查找bean。

请注意,我们不关心特定于Web的bean范围,例如会话或请求;所有服务都是单身范围。

下面显示了相关的代码段

MyServlet extends LegacyServletSuperclass
{
   private MyThreadSafeServiceBean wantThisToBeAutowiredBySpring;
   ....

}

1 个答案:

答案 0 :(得分:2)

您可以将@Configurable<context:load-time-weaver />结合使用,并在servlet中使用@Autowired。这允许Spring没有实例化的类由spring处理。

您也可以使用另一种方法 - 在servlet的init(..)方法中:

ApplicationContext ctx = 
    WebApplicationContextUtils.getWebApplicationContext(servletContext);
if (ctx != null) {
    ctx.getAutowireCapableBeanFactory().autowireBean(this);
}

这将设置所有spring依赖项(使用@Autowired / @Resource)。如果在spring中定义服务类,它将起作用,我认为是这种情况。

从可测试性的角度来看 - 如果没有Web应用程序上下文,则不会发生任何事情,您可以手动设置依赖项。如果需要,您还可以模拟应用程序上下文,具体取决于您测试servlet的方式