web-dev-qa-db-ja.com

Spring FrameworkアプリケーションでのBeans.xml構成ファイルの使用について

私は春のMVCを勉強しています。今日、JDBC DAOの実装方法を理解しようとして、この「Hello World」をSpring(SpringではなくSpring MVC)で見つけて、それを見始めました(DAOを実現するには、別のSpringを作成する必要があると思うので)データへのアクセスを実行するプロジェクト...)

http://www.tutorialspoint.com/spring/spring_hello_world_example.htm

これはスタンドアロンアプリケーションであり、これはWebアプリケーションではないため、Webアプリケーションの構造(WEB-INFフォルダー、web.xmlファイル、およびWebアプリにあるディスパッチャーサーブレット構成ファイル)がありません。

この例では、 Beans.xml 構成ファイルを使用して、さまざまなBeanに一意のIDを割り当て、Springソースファイルに影響を与えずにさまざまな値を持つオブジェクトの作成を制御しています。 ...

たとえば、この例では、 Beans.xml ファイルを使用して「message」変数の「Hello World」メッセージ値を渡しているため、影響を受けずにこの値を印刷できますHelloWorld.JavaおよびMainApp.Javaファイル

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

だから私はあなたにそれについていくつか質問があります:

  1. このファイルは、私のBean Factoryを構成するファイルですか?変数の値としてテキスト値を渡すだけでなく、別のBeanの依存関係としてBeanを注入することもできると思います。

    正しいですか?

  2. この例では、 Beans.xml ファイルを使用せず、注釈システムの代わりに使用できますか?

8
AndreaNobili

1)これはBeans.xml(実際には好きな名前を付けることができます)はSpring構成ファイル構成メタデータ を保持します。

Spring公式ドキュメントから:

5.2.1構成メタデータ

前の図が示すように、Spring IoCコンテナーは、構成メタデータの形式を使用します。この構成メタデータは、アプリケーション開発者がSpringコンテナーにアプリケーション内のオブジェクトをインスタンス化、構成、およびアセンブルするように指示する方法を表します。

構成メタデータは伝統的にシンプルで直感的なXML形式で提供されますが、これが構成メタデータの唯一の許可された形式ではありません(2番目の質問への回答を参照してください) )

はい、そうです。別のBeanを参照として注入できます。

Spring公式ドキュメントから:

5.3 Beanの概要

Spring IoCコンテナは1つ以上のBeanを管理します。これらのBeanは、例えばXML定義の形式でコンテナーに提供する構成メタデータを使用して作成されます。

コンテナ自体では、これらのBean定義はBeanDefinitionオブジェクトとして表され、(他の情報とともに)次のメタデータが含まれています。

  • パッケージ修飾されたクラス名:通常、定義されるBeanの実際の実装クラス。

  • Beanの動作設定要素。コンテナ内でのBeanの動作を記述します(スコープ、ライフサイクルコールバックなど)。

  • Beanが機能するために必要な他のBeanへの参照。これらの参照は collaboratorsまたはdependencies とも呼ばれます=。

  • 新しく作成されたオブジェクトで設定するその他の構成設定。たとえば、接続プールを管理するBeanで使用する接続の数、またはプールのサイズ制限。


公式ドキュメントから他のBeanへの参照を使用する簡単な例:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="exampleBean" class="examples.ExampleBean">
        <!-- setter injection using the nested <ref/> element -->
        <property name="beanOne">
            <ref bean="anotherExampleBean"/>
        </property>

        <!-- setter injection using the neater 'ref' attribute -->
        <property name="beanTwo" ref="yetAnotherBean"/>
        <property name="integerProperty" value="1"/>
    </bean>

    <bean id="anotherExampleBean" class="examples.AnotherBean"/>
    <bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

</beans>

2)Springの公式ドキュメントから:

5.2.1構成メタデータ

...

XMLベースのメタデータは、許可される構成メタデータの唯一の形式ではありません。 Spring IoCコンテナー自体は、この構成メタデータが実際に書き込まれる形式から完全に切り離されています。

Springコンテナで他の形式のメタデータを使用する方法については、以下を参照してください。

  • 注釈ベースの構成 :Spring 2.5では、注釈ベースの構成メタデータのサポートが導入されました。

  • Javaベースの構成 :Spring 3.0以降、Spring JavaConfigプロジェクトによって提供される多くの機能がコアSpring Frameworkの一部になりました。したがって、XMLファイルではなくJavaを使用して、アプリケーションクラスの外部にあるBeanを定義できます。これらの新機能を使用するには、@Configuration@Bean@Importおよび@DependsOnアノテーション。

これも読んでください:
XMLを使用しないSpring:Springアノテーションの基本とSpring XMLファイル

19
informatik01

フォルダを作成しました/src/main/resources/およびこれを配置しましたbeans.xmlそこにファイル:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

 <bean id="employee" class="HelloSpring.Employee">
 <property name="name" value="test spring"></property>
 </bean>
</beans>

動いた!

私はこのようにそれにアクセスしました:

package HelloSpring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Customer {

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("./beans.xml");

        Employee obj = (Employee) ctx.getBean("employee");
        obj.displayName();
    }
}
2
Rakesh Narang