Spring 通过ContextLoaderListener
which is a ServletContextListener
(Servlet API 的一部分)加载其应用程序上下文。所有已注册ServletContextListener
和其他侦听器类型在任何声明Filter
的 s 和Servlet
s 之前初始化。
因此,假设您设置targetFilterLifecycle
为false
,当您DelegatingFilterProxy
由 Servlet 容器创建时,您的Filter
bean 已经在应用程序上下文中创建并初始化(这就是它应该声明的地方)。
javadoc 说明以下内容targetFilterLifecycle
:
默认为“假”;目标 bean 通常依赖 Spring 应用程序上下文来管理它们的生命周期。将此标志设置为“true”意味着 servlet 容器将控制目标过滤器的生命周期,此代理委托相应的调用。
如果您将其设置或保留为false
,Spring 将负责初始化对象并执行任何 bean 注入(和/或执行其他生命周期步骤)。如果将其设置为true
,Spring 将在完成自己的初始化后将其交给 Servlet 容器进行自己的初始化。这是通过init
在启动时调用方法和destroy
在关闭时调用方法来完成的。