代码之家  ›  专栏  ›  技术社区  ›  Peter

如何使bean autowire进入servlets的容器级别上的遗留webapp spring感知?

  •  3
  • Peter  · 技术社区  · 16 年前

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

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

    下面显示了相关的代码段

    MyServlet extends LegacyServletSuperclass
    {
       private MyThreadSafeServiceBean wantThisToBeAutowiredBySpring;
       ....
    
    }
    
    1 回复  |  直到 13 年前
        1
  •  2
  •   Radha G    13 年前

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

    您也可以使用其他方法-在 init(..) 您的servlet方法:

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

    这将设置所有Spring依赖项(其中 @自动连线 / @Resource 使用)。如果服务类是在Spring中定义的,那么它将起作用,我假设是这样的。

    从可测试性的角度来看——如果没有Web应用程序上下文,什么都不会发生,您可以手动设置依赖项。如果需要,还可以模拟应用程序上下文,这取决于您测试servlet的方式。

    推荐文章