0

汎用アプリケーション コンテキスト xml ファイルを含む Spring MVC プロジェクトがあります。このファイルは、i18n のベース プロパティ ファイルやデータベースに接続するためのデータ ソースなど、アプリケーションの一般的な構成を定義します。このコンテキスト ファイルを定義する一方で、使用するデータ ソース、第 2 レベルのキャッシュ (eh-cache) などの基本構成を持つセッション ファクトリも定義したいと考えています。ただし、これには、アプリケーションがロードするエンティティ Bean のリストは含まれません。エンティティ Bean のマッピングを別のファイルにのみ保持し、必要に応じてロードしたいと考えています。

ベース ファイルで定義したセッション ファクトリを拡張し、追加のエンティティ Bean のみを追加する可能性はありますか? 最終的には、エンティティの個別のセットをロードするいくつかのスプリング構成ファイルを作成します。これは達成できますか?

4

1 に答える 1

1

いくつかの可能性があります。

  • を使用PropertyPlaceHolderConfigurerして、エンティティ リストをプロパティ ファイルに外部化できます。(プロパティ ファイルで SPEL を使用できます)。

  • 抽象 Bean 定義を使用して、それを他の sessionFactory Bean の親として使用すると、Enviroment PropertySource.

HibernateSessionFactoryはビルド後に不変であり、メソッドSessionFactoryBeanを組み込むため、必要な設定作業は一部の人が行う必要があることに注意してください。SessionFactoryafterPropertiesSetSessionFactoryBeanBeanFactoryPostProcessor

編集

あなたのコメントを読んだ後、EntityClassHolderBean を宣言し、Autowire コレクション機能を使用してEntityClassFactoryBean、単一の に注入できるすべてのエンティティを取得できると思いますSessionFactoryBean。しかし、それがあなたがやりたいことかどうかはわかりません:

public class EntityClassHolder {

  List<Class<?>> entityClasses;

  public List<Class<?>> getEntityClasses() {
    return entityClasses;
  }

  public void setEntityClasses(List<Class<?>> entityClasses) {
    this.entityClasses = entityClasses;
  }
}



  public class EntityClassFactoryBean extends AbstractFactoryBean<List<Class<?>>> {

    @Autowired
    List<EntityClassHolder> list; 

    @Override
    public Class<?> getObjectType() {
        return List.class;
    }

    @Override
    protected List<Class<?>> createInstance() throws Exception {
        ArrayList<Class<?>> classList = new ArrayList<Class<?>>();
        for (EntityClassHolder ech : list) {
            classList.addAll(ech.getEntityClasses());
        }

        return classList;
    }
}

たとえば、複数の applicatonContext-xxx.xml がある場合、そのうちの 1 つをロードするとSessionFactory、Bean で定義されたエンティティ クラスで構成されます。EntityClassHolder

于 2012-05-18T12:17:23.763 に答える