java - Spring Candidate Bean Type Strategyは、修飾子をチェックする前に、指定されたタイプのすべてのBeanをインスタンス化しないでください

原文 java spring

複数のデータベースを備えたアプリケーション、およびカスタムEntityManagerスコープ。

Springは、適格なタイプをフィルタリングする前に、いくつかのタイプのすべてのBean候補を作成することを理解しています。

したがって、私の場合、1つだけ開く必要がある場合でも、すべてのemfを開きます!

デバッグすると、問題の原因となるコードの一部に移動します。
org.springframework.beans.factory.annotation.BeanFactoryAnnotationUtils

/**
  * Obtain a bean of type {@code T} from the given {@code BeanFactory} declaring a qualifier
  * (e.g. {@code <qualifier>} or {@code @Qualifier}) matching the given qualifier).
 */
private static <T> T qualifiedBeanOfType(ConfigurableListableBeanFactory bf, Class<T> beanType, String qualifier) {    
    Map<String, T> candidateBeans = BeanFactoryUtils.beansOfTypeIncludingAncestors(bf, beanType);
 -> Spring is looking for all bean condidate with the given Type before testing the qualifier
        T matchingBean = null;
        for (String beanName : candidateBeans.keySet()) {
            if (isQualifierMatch(qualifier, beanName, bf)) {
            ........
            }
        }
    }


次に作成部分

    public <T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)
                throws BeansException {

        String[] beanNames = getBeanNamesForType(type, includeNonSingletons, allowEagerInit);
        Map<String, T> result = new LinkedHashMap<String, T>(beanNames.length);
        for (String beanName : beanNames) {
            try {
               result.put(beanName, getBean(beanName, type));
-> the bean is created even if its not the qualified one
            }
    ...........
            }
        }


すべてのBean候補を作成する前に、Springコードを変更して修飾されたBeanを見つけることができますが、別の方法があるのでしょうか?
答え
改善は受け入れられ、バージョン4.1.9および4.2.4でロールアウトされました。
詳細については、バグレポートを参照してください:https://jira.spring.io/browse/SPR-13741
関連記事

java - appengine内でのsqliteファイルの作成

java - GXT円グラフで色を選択する

java - Hibernate ValidatorでSpringリソースバンドルを使用する

java - Java同期の待機および通知メソッド

java - Javaを使用して独自のカスタムフォントを作成することはできますか?

java - Atomikos、Tomcat、トランザクションログ、システムプロパティを監視しない

java - 自動vsカスタムLuceneスコアリング

java - Mac OS X YosemiteでのNetLogo R拡張機能のインストールエラー

java - RESTfulアプリの設計…Java Webアプリのうち

java - 相互互換性のためにC#暗号化をJava(Android)暗号化に変換するヘルプ