0

最初: はい、ドキュメントを見てきました。

彼らは、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 プロパティを次のように定義されたリストに置き換えたいと思います (ライブラリを使用するサービスのアプリ コンテキストで):

<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」という名前を付けるだけで、自動的にオーバーライドされますか?

4

1 に答える 1

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

しかし、単純にプロパティ プレースホルダーを使用してクラスを指定し、カンマ区切りのリストをプロパティ ファイルに追加してみませんか?

<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の値を追加する必要があります。

于 2013-09-11T11:40:43.380 に答える