Spring 如何启用 Tomcat 阀门
我写了一个Tomcat Valve并在server.xml中配置它。 到目前为止,一切都很好。然而,我希望 Valve 的数据成员之一是 Spring 管理的 bean。 那么,我怎样才能使阀门也由 Spring 管理,以便我可以让 Spring 的 IoC 将该依赖项注入到阀门中?
I wrote a Tomcat valve and configured it in server.xml.
So far so good. However, I want one of the valve's data members to be a Spring managed bean.
So, how can I make the valve also be Spring managed so that I can have Spring's IoC inject that dependency into the valve?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Valve 不与应用程序关联,而 Spring 上下文则与应用程序关联。所以你不能在 Valve 中使用 spring 管理的 bean。
当然,您可以在 Valve 构造函数中实例化 spring 上下文,并在那里使用 context.autowireBean(this) ,但这将是一个单独的 spring 上下文,而不是任何可用上下文中的一个。
从技术上讲,您可以从 Valve 访问上下文,但据我所知,它是从请求中访问的,因此您可以获取每个 servlet 上下文的
ApplicationContext
,并从那里获取对 bean 的引用,但是这听起来很奇怪。Valves aren't associated with an application, while spring contexts are. So you can't have a spring-managed bean in a Valve.
You can, of course, instantiate the spring context in the Valve constructor, and use
context.autowireBean(this)
there, but this will be a separate spring context, not one from any of the contexts available.Technically, you have access to the contexts from the Valve, but afaik it is from the request, so you can obtain the
ApplicationContext
for each servlet context, and from there - get a reference to a bean, but that sounds odd.