ここで行う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");
インターフェース_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
クラスのオブジェクトを作成しています
あなたの質問は本質的に「春はどのように機能するか」です、これは 公式ドキュメント によって広範囲にカバーされています
以下は、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");
コードで行っていることは_Spring Dependency Injection
_と呼ばれ、アプリケーションBeanを定義し、必要なときにそれらを注入できます。 XMLファイルから特定のBeanを挿入するコードで使用するgetBean()
メソッドのように。
これをすばやく見ると、このコードはスプリングを使用して、xmlファイルにあるスプリングBeanで指定された値でHelloオブジェクトを初期化するようです(これがfilrにあると想定していますが、より具体的にすることができます2番目のhelloオブジェクトを作成するときは、コンストラクターのデフォルト値であるnullを表示に使用しています。