栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我想使用Spring在Servlet中注入对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我想使用Spring在Servlet中注入对象

您正在混淆两个概念:Servlet和Spring的

ApplicationContext
。Servlet由Servlet容器管理,以Tomcat为例。在
ApplicationContext
由Spring管理。

Servlet
在部署描述符中将a声明为

<servlet>    <servlet-name>servletOne</servlet-name>    <servlet-class>mypackage.servletOne</servlet-class></servlet><servlet-mapping>    <servlet-name>servletOne</servlet-name>    <url-pattern>/servletOne</url-pattern></servlet-mapping>

Servlet容器将创建您的

mypackage.servletOne
类的实例,进行注册,并使用它来处理请求。这就是
DispatcherServlet
Spring
MVC的基础。

Spring是一个IoC容器,用于

ApplicationContext
管理许多bean。该
ContextLoaderListener
负载根
ApplicationContext
(无论从任何位置,你告诉它)。在
DispatcherServlet
使用了根上下文,因此也必须加载其自身。上下文必须具有适当的配置
DispatcherServlet
才能工作。

在Spring上下文中声明一个bean,例如

<bean id="servletFirst" >        <property name="message" ref="classObject" /></bean>

不管它与

<servlet>
web.xml中声明的类型是否相同,都是完全无关的。上面的bean与
<servlet>
web.xml中的声明无关。

就像我在这里的答案一样,因为

ContextLoaderListener
ApplicationContext
它创建的puts
ServletContext
作为属性,所以
ApplicationContext
任何Servlet容器托管对象都可以使用它。因此,您可以像这样
HttpServlet#init(ServletConfig)
在自定义
HttpServlet
类中覆盖

@Overridepublic void init(ServletConfig config) throws ServletException {   super.init(config);   ApplicationContext ac = (ApplicationContext) config.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);   this.someObject = (SomeBean)ac.getBean("someBeanRef");}

假设您的根

ApplicationContext
包含一个名为的bean
someBeanRef



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386817.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号