Spring - 使用 applicationContext.xml 和 XXXXX-servlet.xml
Posted
技术标签:
【中文标题】Spring - 使用 applicationContext.xml 和 XXXXX-servlet.xml【英文标题】:Spring - using applicationContext.xml and XXXXX-servlet.xml 【发布时间】:2011-03-30 13:02:48 【问题描述】:我正在将 Spring MVC 集成到我一直在从事的现有项目中。通过集成,我的意思是我正在使用 Spring 重写项目,并使用我的大部分旧代码。我已经设置了环境并开始着手处理它。我将此项目称为 ProjectX。
我已经设置并配置了我的 ProjectX-servlet.xml,它包含视图解析器 bean 和控制器 bean 等。我想设置一个 applicationContext.xml 文件,我可以将我的所有 DAO bean 放在...
<bean id="MemberDAO" class="com.xxx.xxx.MemberDAO"/>
<bean id="ProductDAO" class="com.xxx.xxx.ProductDAO"/>
我希望这些值位于 applicationContext.xml 中,以便在我的控制器中执行以下操作。
public SomeController extends SimpleFormController
private MemberDAO memberDao;
private ProductDAO productDao;
...getter/setter methods for memberDao;
...getter/setter methods for productDao;
并且值将可用(将它们注入控制器)
我已经在 ProjectX-servlet.xml 中配置了控制器,如下定义。
<bean name="/SomeController.thm" class="com.xxx.xxx.controllers.SomeController">
<property name="memberDao" ref="MemberDAO"/>
<property name="productDao" ref="ProductDAO"/>
</bean>
我认为我需要在我的 web.xml 中配置如下内容,以便它知道加载应用程序上下文。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
我的问题是,在创建 applicationContext.xml 文件后我必须做什么,才能执行上面显示的操作并注入诸如 ProductDAO 和 MemberDAO 到我在 ProjectX-servlet.xml
中配置的控制器中我已经使用 Spring MVC 签订合同几个月了,并且对如何使用它感到满意,但我是新来自己配置它,供我自己使用,所以如果有任何建议或答案,我将不胜感激对我来说更容易解释。
谢谢
【问题讨论】:
【参考方案1】:按照惯例,您为DispatcherServlet
的实例指定的名称将与name-servlet.xml
相关联。如您所述,此上下文将是applicationContext.xml
的子级,这意味着它将可以访问applicationContext.xml
中的bean。
在您的 web.xml
中尝试以下操作:
<servlet>
<servlet-name>ProjectX</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProjectX</servlet-name>
<url-pattern>/projectx/*</url-pattern>
</servlet-mapping>
【讨论】:
【参考方案2】:您不必做任何特别的事情。您可以继续将 applicationcontext.xml 中定义的 bean 注入 xx-servlet.xml 中定义的 bean,就好像它们都在同一个文件中声明一样。请记住使用属性 ref 而不是 ref-local,如下所示。
<bean id="mycontroller" class="x.y.z.CustomerController>
<property name="service" ref="myservice"/><!--myservice defined in applicationcontext-->
</bean>
【讨论】:
【参考方案3】:除非我有误解,否则您正在寻找的解决方案是在 applicationContext.xml 中使用导入语句。这有效地将两个 XML 文件组合到一个上下文中,允许您在其中一个中引用 bean。
例如:
<import resource="classpath:foo/bar/ProjectX-servlet.xml" />
您可能想也可能不想使用“类路径”。详情请见section 3.2.2.1 in the Spring docs。
【讨论】:
以上是关于Spring - 使用 applicationContext.xml 和 XXXXX-servlet.xml的主要内容,如果未能解决你的问题,请参考以下文章