web-dev-qa-db-ja.com

getBean()メソッドはここで何をしますか?

ここで行うgetBean()メソッドとは何ですか?プログラムではどのように機能しますか?

ApplicationContext aplicntxt = new 
ClassPathXmlApplicationContext("springconfig.xml");  

Hello h = (Hello) aplicntxt.getBean("springconfig.xml");  
h.display();

Hello h2 = new Hello();  //if I write this
h2.display();  

私の質問はなぜh2.displayはnull値を取得し、h.display springconfig.xmlを介して保存された値を取得しますか?

何を教えてください

ApplicationContext aplicntxt = new ClassPathXmlApplicationContext("springconfig.xml");

最初にしますか?

Xmlファイルのすべての値は最初のステップでpojoクラスセッターに保存されていますか?

次に、値をオブジェクトhに保存します。

Hello h = (Hello) aplicntxt.getBean("springconfig.xml");
3
Arun Raaj

春のドキュメントから

インターフェース_org.springframework.context.ApplicationContext_は_Spring IoC_コンテナーを表し、前述のBeanのインスタンス化、構成、およびアセンブルを担当します。コンテナーは、構成メタデータを読み取ることにより、インスタンス化、構成、およびアセンブルするオブジェクトに関する指示を取得します。構成メタデータは_XML, Java annotations, or Java code._で表されます。これにより、アプリケーションを構成するオブジェクトと、そのようなオブジェクト間の豊富な相互依存関係を表現できます。

_ApplicationContext interface_のいくつかの実装は、Springにすぐに提供されます。スタンドアロンアプリケーションでは、_ClassPathXmlApplicationContext or FileSystemXmlApplicationContext._のインスタンスを作成するのが一般的です。XMLは構成メタデータを定義するための従来の形式ですが、メタデータとしてJavaアノテーションまたはコードを使用するように、コンテナーに指示できます。 declarativelyに少量のXML構成を提供してフォーマットし、これらの追加のメタデータフォーマットのサポートを有効にします。

これで、質問とその単純なApplicationContextがオブジェクト(熱心なコンテナ)をアクティブにし、宣言されたbeansを探して、呼び出されるたびにオブジェクトがロードされるようにします。

ここで、2つのBeanがあり、そのうちの1つが必要な場合は、ctx.getBean("beanId")を使用してインスタンスをロードし、このBeanで宣言されたデータを提供することでそのBeanを見つけることができます。ここで、beanIdはどのオブジェクトを示します。 loadに。

次の例を検討してください

_<bean id="a" class="package.Hello" /> //here it will look for bean name and then loads the class_

今あなたがそれを次のように呼ぶとき

_ApplicationContext ctx=new ClassPathXMLApplicationContext("configuration.xml");

//will look for configuration.xml bean file if it is not in path then throw execption.
_

_Hello hello=ctx.getBean("a");

// if configuration.xml contains any bean named "a" and holds reference to class(hello) load it immediately and return object of that class
_

と同じです

_Hello hello=new Hello();
hello.method();
_

Helloを使用してxmlクラスのオブジェクトを作成しています

1

あなたの質問は本質的に「春はどのように機能するか」です、これは 公式ドキュメント によって広範囲にカバーされています

以下は、springconfig.xmlで定義されたすべてのBeanを作成します。つまり、指定されたタイプのオブジェクトを作成し、定義したプロパティを挿入します。正確な構成に応じて、パッケージスキャン、アノテーション処理なども実行できます。

ApplicationContext aplicntxt= new ClassPathXmlApplicationContext("springconfig.xml");

XML

<bean class="org.example.Hello" id="foo" />
<bean class="org.example.Hello" id="bar" />

これにより、Helloタイプのオブジェクトが作成され、ID「foo」および「bar」でタグ付けされます。

すべてのBeanは、後でgetBean()を介して取得できるように、IDに対して保存されます。これは、XMLファイルではなく、BeanIDまたは名前を使用することに注意してください。

Hello h = (Hello) aplicntxt.getBean("foo");
3
Adam

コードで行っていることは_Spring Dependency Injection_と呼ばれ、アプリケーションBeanを定義し、必要なときにそれらを注入できます。 XMLファイルから特定のBeanを挿入するコードで使用するgetBean()メソッドのように。

これをすばやく見ると、このコードはスプリングを使用して、xmlファイルにあるスプリングBeanで指定された値でHelloオブジェクトを初期化するようです(これがfilrにあると想定していますが、より具体的にすることができます2番目のhelloオブジェクトを作成するときは、コンストラクターのデフォルト値であるnullを表示に使用しています。

1
jencoston