[TIL] Spring Core 1.1-1.2


1. The IoC Container


この章ではSpringのIoC(Inversion of Control)コンテナについて説明します.

1.1. Introduction to the Spring IoC Container and Beans


この章ではSpringIoC容器とVINについて説明します.
IoCは依存注入(DI)とも呼ばれる.
オブジェクトは、作成者パラメータ、ファクトリメソッドのパラメータ、またはファクトリメソッドで作成または戻した後にオブジェクトインスタンスで設定したプロパティのみで依存関係を定義するプロセスです.
コンテナは、空の作成時にこれらの依存関係を注入します.
このプロセスでは、クラスの直接構成やサービスロケータモードなどのメカニズムを使用してbean自身のIoCを実行し、依存関係のインスタンス化や位置を制御します.
Service Locatorモード
キャッシュに必要なデータがある場合は、キャッシュでデータが検索され、渡されます.
ない場合は、メモリ内の奇跡的なデータを検索し、キャッシュに登録して返します.org.springframework.beans org.springframework.contextこれらのバッグはSpringIoC容器の基礎です.
BeanFactoryインタフェースは、すべてのタイプのオブジェクトを管理できる先進的な優先パラメータメカニズムを提供します.
ApplicationContextはBeanFactoryのサブインタフェースです.

ApplicationContextの新規コンテンツ

- Spring의 AOP 기능과의 손쉬운 통합
- 메시지 리소스 핸들링 (Internationalization에 사용)
- 이벤트 발생
- 웹 어플리케이션에서 사용하는 WebApplicationContext와 같은 어플리케이션 계층의 특정 컨텍스트들
BeanFactoryは、構成フレームワークと基本機能を提供します.
ApplicationContextは、より多くの企業固有の機能を追加しました.
ApplicationContextは、BeanFactoryの完全な親セット(すなわち、アプリケーションContextによって提供される拡張コンセプト)です.はい.
beanはSpring IoCによってインスタンス化、組み立て、管理されるオブジェクトです.
beanがSpring IoCによって管理されていない限り、アプリケーション内の多くのオブジェクトの1つにすぎません.
beanとそれらの相関は、コンテナで使用される構成メタデータに反映されます.

1.2. Container Overview


Theorg.springframework.context.ApplicationContextインタフェースはSpringIoC容器を表し、beanのインスタンス化、構成、組み立てを担当する.
コンテナは、構成メタデータを読み込むことで、インスタンス化、構成、およびアセンブリするオブジェクトの説明を取得します.

Configuration metadata

- XML
- Java Annotation
- Java Code
アプリケーションContextインタフェースの複数のインプリメンテーションはSpringとともに提供される.
スタンドアロンアプリケーションでは、通常、ClassPathXmlApplicationContextまたはF i l e SystemXmlApplicationContextインスタンスが作成され実装されます.
アプリケーションクラスは構成メタデータと結合され、アプリケーションコンテキストの作成、初期化後、完全に構成可能、実行可能なシステムまたはアプリケーションがあります.

1.2.1. Configuration Metadata


SpringIoCコンテナは構成メタデータフォーマットを使用します.
構成メタデータは、アプリケーション開発者がSpringコンテナでアプリケーションオブジェクトをインスタンス化、構成、および組み立てる方法を示します.
XMLベースのメタデータは唯一許容される構成ではないため、SpringIoCコンテナ自体はこの方式から完全に分離されている.
最近、多くの開発者がSpring開発時にJavaベースの構成を好むようになりました.
Annotation-based configuration:Spring 2.5から導入します.
Java-based configuration:Spring 3.0から導入します.
xmlファイルではなくJavaを使用して、アプリケーションクラスの外でbeanを定義できます.
@Configuration,@Bean,@Import,@DependsOnAnnotationリファレンス
Spring構成は、コンテナが管理する必要がある少なくとも1つのbean定義から構成されます.
XMLに基づいて、これらのスペースは<beans> <bean/> <beans/>の形で構成される.
Javaは@Configurationクラスで@Beanメソッドを使用します.
これらの空の定義は、アプリケーションを構成する実際のオブジェクトに相当します.
通常、サービス層オブジェクト、データ・アクセス・オブジェクト(DAO)、Strutsアクション・インスタンス、Hibernate Session Factory、JMSキューなどのインフラストラクチャ・オブジェクトが定義されます.
通常、ドメインオブジェクトの作成とロードはDAOとビジネスロジックの役割であるため、コンテナに細分化されたドメインオブジェクトは構成されません.
SpringとAspectJの統合により、IoCコンテナ制御以外で生成されたオブジェクトを整理できます.

XML-based Configuration metadata

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="..." class="...">  
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions go here -->

</beans>

1.2.2. Instantiating a Container


ApplicationContextジェネレータが提供するロケーションパスまたはパスは、ローカルファイルシステム、Java CLASSSPATHなどのさまざまな外部リソースから構成メタデータをコンテナにロードできるリソース文字列です.
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

services.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- services -->

    <bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
        <property name="accountDao" ref="accountDao"/>
        <property name="itemDao" ref="itemDao"/>
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions for services go here -->

</beans>

daos.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="accountDao"
        class="org.springframework.samples.jpetstore.dao.jpa.JpaAccountDao">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <bean id="itemDao" class="org.springframework.samples.jpetstore.dao.jpa.JpaItemDao">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions for data access objects go here -->

</beans>
上記の例では、サービス層は、PetStoreServiceImplクラスとJpaAccountDaoとJpaItemDaoタイプ(JPA ORM規格)の2つのデータ・アクセス・オブジェクトから構成されています.
property要素はJavaBeanプロパティのnameを参照し、ref要素は他の空定義の名前を参照します.

1.2.3. Using the Container


ApplicationContextは、他の空席とその依存性を維持できる開発されたインタフェースです.T getBean(String name, Class<T> requiredType)メソッドは、空のインスタンスを検索するために使用することができる.
// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

// retrieve configured instance
PetStoreService service = context.getBean("petStore", PetStoreService.class);

// use configured instance
List<String> userList = service.getUsernameList();
ApplicationContextインタフェースでは、空の検索に使用できるいくつかの異なる方法がありますが、実際のアプリケーションを作成するときは、これらの方法を使用しないでください.
実際には、アプリケーションコードはgetBean()メソッドを呼び出すのではなく、Swing APIに完全に依存しないでください.