gpt4 book ai didi

spring - 如何在容器级别使遗留 webapp spring 感知 bean Autowiring 到 Servlet 中?

转载 作者:行者123 更新时间:2023-12-01 15:37:30 26 4
gpt4 key购买 nike

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

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

下面是相关的代码片段

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

}

最佳答案

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

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

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

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

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

关于spring - 如何在容器级别使遗留 webapp spring 感知 bean Autowiring 到 Servlet 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com