3

我在 3.0 中有一个 xml,如下所示:

        <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="${jdbc.driverClassName}" />
            <property name="url" value="${jdbc.internal.url}" />
            <property name="username" value="${jdbc.internal.username}" />        
            <property name="password" value="${jdbc.internal.password}"/>
        </bean>

我想在使用的同时将其转换为 3.1beans:profile但是,当我尝试将其更改为:

        <beans profile="dev">
          <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
              <property name="driverClassName" value="${jdbc.driverClassName}" />
              <property name="url" value="${jdbc.internal.url}" />
              <property name="username" value="${jdbc.internal.username}" />        
              <property name="password" value="${jdbc.internal.password}"/>
        </bean>
        </beans>

我收到如下错误:

Invalid content was found starting with element 'bean'. One of '{"http://www.springframework.org/schema/beans":beans}'

问题

我怎样才能利用beans:profile这个特定的bean定义只在活动配置文件被调用时被调用dev

更新 我的 bean 定义是:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd">
4

3 回答 3

8

您必须将所有嵌套<beans>声明放在配置文件的最后。这就是 XML 模式的定义方式,您必须遵守这一点。

也可以看看

  • Spring Framework 3.1 M1 发布

    spring-beans-3.1.xsd已更新为允许这种嵌套,但仅限于允许此类元素仅作为文件中的最后一个元素。

于 2012-11-09T15:39:33.750 回答
2

这是设计使然。

来自SpringSource 博客

spring-beans-3.1.xsd 已更新为允许这种嵌套,但仅限于允许此类元素仅作为文件中的最后一个元素。这应该有助于提供灵活性,而不会在 XML 文件中产生混乱。虽然此增强功能是为 bean 定义配置文件服务而开发的,但嵌套元素通常很有用。假设您在给定文件中有一个应标记为lazy-init="true" 的bean 子集。您可以声明一个嵌套元素,而不是标记每个 bean,并且其中的所有 bean 都将继承该默认值。文件中其他地方定义的 Bean 将保持正常默认的lazy-init="false"。这适用于元素的所有 default-* 属性,例如 default-lazy-init、default-init-method、default-destroy-method 等。

于 2012-11-09T15:40:27.497 回答
0

我遇到了同样的问题:即使是正确的,我也从来没有成功嵌套<beans>过另一个。<beans>spring-beans.xsd

我的(部分)解决方案是创建另一个applicationContext.xml

<beans profile="dev, qualif" 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>
于 2012-11-09T15:34:36.100 回答