春のコンテナは、同じジェネリッククラスに属するが、異なる種類を使用するオブジェクトのための新しいBeanを作成していますか?

なるがままに :

私は、異なるコントローラで異なる種類の私の一般的なクラスをautowire場合は、春のコンテナには、それぞれの新しいインスタンスを作成しますか?

私はジェネリッククラスを持っていると仮定します。

@Component
class MyClass<T, K>{

    public K doStuff(T t){
        // some logic here
    }

}

コントローラIの使用で

@Autowired
MyClass<Employee, Integer> myClass;

別のコントローラIの使用で

@Autowired
MyClass<Manager, String> myClass;
michalk:

私はそれが春を使用するためのテストを行いました5.1.6-RELEASEここでは、コードと出力は次のようになります。

@Component
public class TestClassWithInteger {

    private MyClass<Integer, Integer> myClass;

    @Autowired
    public TestClassWithInteger(MyClass<Integer, Integer> myClass) {
        this.myClass = myClass;

        this.perform();
    }


    public void perform() {
        System.out.println(myClass);
        myClass.doStuff(1);
    }
}

@Component
public class TestClassWithString {

    private MyClass<String, String> myClass;

    @Autowired
    public TestClassWithString(MyClass<String, String> myClass) {
        this.myClass = myClass;

        this.perform();
    }


    public void perform() {
        System.out.println(myClass);
        myClass.doStuff("test");
    }
}

@Component
class MyClass<T, K>{

    public K doStuff(T t){
        System.out.println(t);
        return null;
    }

}

出力は次のようになります。

test.example.MyClass@841e575
1
test.example.MyClass@841e575
test

あなたはあなたのために、一般的な豆は、デフォルトではシングルトンであるという事実を、見ることができるように、それはアプリケーションコンテキストによって返される-予告ハッシュコードの六角オブジェクトを印刷する場合-それは同じです。我々が変更した場合MyClass、プロトタイプに豆のスコープを、出力は次のようになります。

test.example.MyClass@533b266e
1
test.example.MyClass@62679465
test

予想通り - アプリケーションコンテキストは、新しいBeanのために照会されるたびに新しいインスタンスを取得します。

質問に対する答えは、そう:

春のコンテナは、同じジェネリッククラスに属するが、異なる種類を使用するオブジェクトのための新しいBeanを作成していますか?

です:いいえ、それはしません

そして、それは私たちがフィリップ・ウェッブさんのコメントを参照することができますどのように機能するかにいくつかの光を当てるためには、掲載ここに

消去はオブジェクトレベルで起こるが、バイトコードではまだ多くの情報があります。で開始することによりfieldparameterまたはreturn我々はまだそこにいた情報を調べることができます入力します。あなたが見た場合たとえば、java.lang.reflect.Methodあなたに加えていることがわかりますgetReturnTypeつまりgetGenericReturnType、より多くの情報を提供する方法。SpringのResolvableTypeアクセスにこの情報を容易にするだけで試行。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=229403&siteId=1