3

在我的 web.xml 中,我删除了contextConfigLocation而不是指向application context我在调度程序 servlet 中定义了我的 bean。这是允许的还是Spring肯定会寻找contextConfigLocation?

<!--context-param>        //This part is commented. Is this allowed?
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener-->

通过调度程序 servlet 中的 bean...

<bean id="dataSource"
        class="org.apache.commons.dbcp.BasicDataSource"
        p:driverClassName="oracle.jdbc.driver.OracleDriver"
        p:url="jdbc:oracle:thin:@localhost:1521:Xe"
        p:username="hibernate"
        p:password="hibernate"></bean>


4

1 回答 1

3

是的,但它们仅在 Web 上下文中可见。看这个答案Spring can't see beans between servlet-context and contextConfigLocation beans

引用WebApplicationContext的 Spring Framework API(在编写 3.2.2 时):

与通用应用程序上下文一样,Web 应用程序上下文是分层的。每个应用程序有一个根上下文,而应用程序中的每个 servlet(包括 MVC 框架中的调度程序 servlet)都有自己的子上下文

也在这里:上下文层次结构

例如,如果您正在开发 Spring MVC Web 应用程序,您通常会通过 Spring 的 ContextLoaderListener 加载一个根 WebApplicationContext ,并通过 Spring 的 DispatcherServlet 加载一个子 WebApplicationContext 。这导致了父子上下文层次结构,其中共享组件和基础架构配置在根上下文中声明,并由特定于 Web 的组件在子上下文中使用。

在这里:17.2 DispatcherServlet

Spring 中的 ApplicationContext 实例可以是作用域的。在 Web MVC 框架中,每个 DispatcherServlet 都有自己的 WebApplicationContext,它继承了根 WebApplicationContext 中已经定义的所有 bean。这些继承的 bean 可以在特定于 servlet 的范围内被覆盖,并且您可以在给定的 Servlet 实例本地定义新的特定于范围的 bean。

不是最后一句话:

您可以在给定的 Servlet 实例本地定义新的特定于范围的 bean

于 2013-06-25T09:17:32.023 回答