gpt4 book ai didi

java - Spring 是否在容器初始化其过滤器之前设置应用程序上下文?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:43 25 4
gpt4 key购买 nike

我正在使用 Spring 的 DelegatingFilterProxy 将 Spring bean 用作容器过滤器。为了使用 Filter 接口(interface)中的 init 和 destroy 方法,我将 targetFilterLifecycle 定义为 true。

Spring 是否确保过滤器类中的所有依赖注入(inject) bean 在容器调用 init 方法时可用,或者是否存在某些 bean 仍未初始化或至少未注入(inject)的风险?

此外,Spring 将 targetFilterLifecycle 默认设置为 false 的原因是什么?

最佳答案

Spring 通过 ContextLoaderListener 加载它的应用上下文,这是一个 ServletContextListener(Servlet API 的一部分)。所有已注册的 ServletContextListener 和其他监听器类型都在任何声明的 FilterServlet 之前初始化。

因此,假设您将 targetFilterLifecycle 设置为 false,当您的 DelegatingFilterProxy 由 Servlet 容器创建时,您的 Filter bean 已经在应用程序上下文中创建和初始化(这是它应该声明的地方)。

javadoc 声明了以下有关 targetFilterLifecycle 的内容:

Default is "false"; target beans usually rely on the Spring application context for managing their lifecycle. Setting this flag to "true" means that the servlet container will control the lifecycle of the target Filter, with this proxy delegating the corresponding calls.

如果您将它设置为或保留为 false,Spring 将负责初始化该对象并执行任何 bean 注入(inject)(和/或执行其他生命周期步骤)。如果你设置为true,Spring会在自己完成后交给Servlet容器自己做初始化。这是通过在启动时调用 init 方法和在关闭时调用 destroy 方法来完成的。

关于java - Spring 是否在容器初始化其过滤器之前设置应用程序上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24122883/

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