Spring - 使用applicationContext.xml和XXXXX-servlet.xml

时间:2010-08-16 16:37:50

标签: java model-view-controller spring frameworks

我正在将Spring MVC集成到我一直在研究的现有项目中。通过集成,我的意思是我使用Spring重写项目,并使用我的旧代码。我已经设置了环境并开始研究它。我将此项目称为 ProjectX

我已经设置并配置了我的 ProjectX-servlet.xml ,它包含了视图解析器bean和控制器bean等。我想设置一个 applicationContext.xml < / b>我可以放置所有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文件后我该怎么办,能够做我上面显示的内容并注入bean,例如 ProductDAO MemberDAO 进入我在 ProjectX-servlet.xml

中配置的控制器

我已经使用Spring MVC签了几个月的合同,并且对如何使用它感到很自在,但是我不熟悉我自己配置​​它,供我自己使用,所以如果有任何建议或答案,我将不胜感激对我来说解释得有点容易。

谢谢

3 个答案:

答案 0 :(得分:2)

按照惯例,您为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>

答案 1 :(得分:1)

除非我误解,否则您正在寻找的解决方案是在applicationContext.xml中使用import语句。这有效地将两个XML文件组合到一个上下文中,允许您在任何一个中引用bean。

例如:

<import resource="classpath:foo/bar/ProjectX-servlet.xml" />

您可能想也可能不想使用“classpath”。有关详细信息,请参阅section 3.2.2.1 in the Spring docs

答案 2 :(得分:1)

你不需要做任何特别的事情。您可以继续将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>