这可能是一个相对直截了当的问题,我只是没有正确搜索,但我正在尝试使用Spring IoC容器来配置我的servlet。我有一些额外的处理程序(私有数据成员),我希望在运行时配置。有可能这样做吗?
现在我的web.xml正确加载了servlet,但问题是我不知道如何将这些实例连接到Spring IoC容器,或者将IoC容器生成的实例连接到servlet容器。
在我的web.xml文件中,我正在设置ContextLoaderListener
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
并为bean上下文配置正确的位置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/beans.xml
</param-value>
</context-param>
我也知道正在解析beans.xml
文件,因为当我输错的东西时我遇到了几个例外。
思考?有更好的方法吗?
答案 0 :(得分:3)
我认为大多数人都希望做你刚才使用的Spring MVC框架。在这种情况下,它是一个Spring类,你只需实现“控制器”(而不是实际的servlet)。
那就是说,完全有可能完全按照你的意愿去做。查看FrameworkServlet(您可以扩展它)或DelegatingFilterPorxy(您可以使用此类编写'DelegatingSevletProxy'作为示例。)
答案 1 :(得分:0)
你应该将你的逻辑移出servlet,这样它们只是瘦包装器,可以获得对Spring应用程序上下文的引用,从上下文实例化bean,传递HTTP请求,会话,所需的任何其他内容,并告诉它们豆子做的工作。
考虑到您无法在servlet容器之外实例化servlet,因此无法对其进行单元测试。 IoC容器无法实例化它。它不会受益于IoC或DI。
如果可以,请使用Spring MVC;您可能希望将servlet中的逻辑移动到控制器类中。
否则,请查看org.springframework.web.context.ContextLoaderListener;从那里你可以看到Spring如何引导自己。