0

Spring applicatioContext xmlファイルを新しいBean定義で拡張してから、それらへの参照をリストに追加する必要があります。これは、1つのBeanのプロパティです。基本的なapplicationContext xmlファイル:

<bean id="myBean" class="com.example.MyBean">
    <property name="providers"> 
        <list>
            <ref bean="provider1">
        </list>
    </property>
</bean>
<bean id="provider1" class="com.example.Provider">

アプリケーションのインスタンスに応じてプロバイダーが異なるため、それらをリストに追加する必要があります。これで、データベースに追加のBean定義があり、BeanFactoryPostProcessorそれらをコンテキストに追加してから、それらへの参照をプロバイダーのリストに追加するために使用します。しかし、私は自動トランザクション管理()で注釈を使用しており、トランザクション注釈を使用しているため、@Transactional処理されません。myBeantx:annotation-drivenBeanFactoryPostProcessor

したがって、アプリケーションコンテキストを拡張し、次にプロバイダーのリストを拡張する別の方法が必要です。何が使えますか?

私の考えは、最初は空のxmlファイルを作成し、それをデータベースからのデータで埋めてから、applicationContextに何らかの方法でインポートすることです。出来ますか?

ご協力いただきありがとうございます

4

2 に答える 2

0

データベースからプロバイダー リストをロードして入力する MyBean クラスで @PostConstruct メソッドを使用します。

@PostConstruct
public void initialize() {
    providers.addAll(providerService.findAll());
}

データベース関連のすべてのコードを Service/Dao クラスに入れ、アノテーションで@Transactional注釈を付けます

于 2012-11-07T10:00:34.077 に答える
0

複数の方法で Bean 定義をオーバーライドまたは拡張できます。要するに、ここに1つの方法があります..

メイン アプリケーション コンテキスト xml:

<bean id="myBaseBean" class="com.example.MyBean" abstract="true">
    <property name="providers"> 
        <list merge="true">
            <ref bean="provider1" />
        </list>
    </property>
</bean>
<!-- default bean definition -->
<bean id="myBean" parent="myBaseBean">
    <property name="providers"> 
        <list merge="true">
        </list>
    </property>
</bean>
<bean id="provider1" class="com.example.Provider">

いくつかの拡張アプリケーション コンテキスト xml:

<bean id="myBean" parent="myBaseBean">
        <property name="providers"> 
            <list merge="true">
                <ref bean="someOtherProvider" />
            </list>
        </property>
    </bean>
 <!-- bean definition of some other provider -->

Transactionsこれは、他のすべての Bean に対して通常どおりにトランザクションを処理する必要があることとは関係ありません。

注: すべてのアプリケーション コンテキスト ファイルは、ApplicationContext.

于 2012-11-07T10:03:52.607 に答える