0

クラスローダーを知っていれば、JVM ランタイム中にクラスのインスタンス (オブジェクトへの参照) を取得できるかどうか疑問に思っています。私の質問を理解するには、以下のコードを参照してください。

クラスA:

package local.run;
public class A {
    public static void main(String[] args) {
        B b = new B();
        b.setCount(5);
        C c = new C();
        c.dummyMethod();
        b.printCount();
    }
}

クラス B:

package local.run;
public class B {
    public int count = 0;
    public void setCount(int aCount) {
        count = aCount;
    }
    public void printCount() {
        System.out.println(count);
    }
}

クラス C:

package local.run;    
public class C {
    public void dummyMethod() {
        // Can I get the instance of class B created in class A here? 
        // I don't want to pass the instance of class B as a parameter to this method.
        System.out.println("ClassLoader Namespace -> "+B.class.getProtectionDomain().getCodeSource().getLocation());

        // I know the ClassLoader Namespace of class B
        // How to get instance of class B created in class A???
        System.out.println(b.count); // I wan't to print 5
    }
}

これが不可能な場合、JSF が @ManagedProperty 機能をどのように実装するのか疑問に思っていますか?

4

2 に答える 2

2

いいえ、 から特定の型のインスタンスを取得することはできませんClassLoader。必要なインスタンスをどのClassLoaderように識別できますか?

他の種類のロジックが必要です。Peter のように、私は JSF がそれをどのように行うのか正確には知らないので、Spring の例を挙げます。

Inversion of Control コンテナーを提供する Spring では、Bean を宣言します。これらはコンテナによって管理されます。コンテナーはそれらを保管し、ライフサイクル全体を制御します。これらの Bean のクラスの 1 つにフィールドがあり、次のように宣言されている場合

@Value("${someBean.someField}")
private String copyValueOfThatField;

次に、コンテナは@Valueアノテーション内の式を解決し、対応する値をcopyValueOfThatFieldフィールドに挿入します。

この場合、コンテナに登録されているすべての Bean を調べて という名前の Bean を見つけ、そのプロパティsomeBeanの値を取得しようとするコンポーネントを使用します。someField

オブジェクト フィールドの値を取得するために、バックグラウンドで大量のリフレクションが行われます。

JSF はそれ自体がコンテナーであり、おそらく上記と同様のことを行います。この用語の使用は、Managedそれを教えてくれるはずです。

于 2014-02-25T21:11:00.717 に答える
0

インスタンスを取得するには、ルックアップのためにインスタンスを保持するコレクションをどこかに持つ必要があります。JSFが具体的にどのように機能するかはわかりませんが、通常、フレームワークはそれが認識する特別な注釈を探し、それらのフィールドを設定するために使用されるインスタンスを保持するか、インスタンスを作成するためのファクトリを持っています.

于 2014-02-25T21:04:33.827 に答える