在App上下文中使用Spring Util Schema覆盖Bean设置

时间:2013-09-11 11:30:45

标签: java spring

首先:是的,我见过docs

他们告诉我如何创建一个util:list,util:set等等。我得到了那个部分。

但是,我有一个带有应用程序上下文的库,其中包含一个bean(特别是一个Hibernate Session Factory bean),其设置我想要覆盖。有几个服务使用这个库,并不是每个服务都需要相同的带注释的类。

会话工厂bean目前看起来像这样:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
            <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
        </props>
    </property>
    <property name="annotatedClasses" >

        <list>
            <value>com.example.model.Person</value>
            <value>com.example.model.Section</value>
        </list>
    </property>
</bean>

我想用这样定义的列表替换annotatedClasses属性(在使用该库的服务的app环境中):

<util:list id="serviceSpecificAnnotatedClasses">
    <value>com.example.model.Person</value>
    <value>com.example.model.Section</value>
    <value>com.example.model.Location</value>
</util:list>

我是否只需要命名util:list“annotatedClasses”并自动覆盖它?

1 个答案:

答案 0 :(得分:1)

不,它不会自动被覆盖。您必须声明bean并默认连接它。

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
            <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
        </props>
    </property>
    <property name="annotatedClasses" ref="annotatedClasses" />
</bean>

<util:list id="annotatedClasses">
    <value>com.example.model.Person</value>
    <value>com.example.model.Section</value>
    <value>com.example.model.Location</value>
</util:list>

没有其他人可以简单地覆盖列表annotatedClasses

但为什么不简单地使用property-placeholder指定类并将逗号分隔的列表添加到属性文件中呢?

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
            <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
        </props>
    </property>
    <property name="annotatedClasses" value="${service.annotatedClasses}" />
</bean>

假设每个服务都有自己的配置属性文件,他们只需要添加 service.annotatedClasses 的值。