Springの作成からBeanオブジェクトの格納・読み込みまで

目次

Spring プロジェクトを作成します。

1. Maven プロジェクトを作成します。

 2. Spring フレームワークのサポートを追加します。

3. リソース ファイルを構成します。

4. スタートアップ クラスを追加します。

Bean オブジェクトの使用:

1. Bean オブジェクトを保存します。

1.1 Bean の作成:

1.2 Bean をコンテナに格納します。

2. Bean オブジェクトを取得します。

2.1 Spring コンテキストを作成します。

2.2 指定された Bean オブジェクトを取得します。

ApplicationContext と BeanFactory の違い:

アプリケーションコンテキスト:

ビーンファクトリー:

要約:

一般的に使用される 3 つの getBean:

ID で取得:

オブジェクトタイプの取得:

ID + オブジェクトタイプの取得:

要約する



Spring プロジェクトを作成します。

        Spring プロジェクトの作成は 4 つのステップに分かれています。

  1.  通常の Maven プロジェクトを作成します。
  2.  Spring フレームワークのサポートを追加します。
  3.  構成リソースファイル。
  4.  スタートアップクラスを追加します。

1. Maven プロジェクトを作成します。

前提条件: バージョン 2022 以降の関連プラグインは有料であるため、個人はできる限り idea2021 を使用するようにします。

 2. Spring フレームワークのサポートを追加します。

        この構成の依存関係を Spring プロジェクトの pom.xml ファイルに追加します。更新してローカル ウェアハウスにダウンロードします。

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.24</version>
        </dependency>
    </dependencies>

3. リソース ファイルを構成します。

        リソース パッケージに xxx.xml ファイルを作成し、そこに Spring 構成ファイルを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.spring.demo"></content:component-scan>
</beans>

4. スタートアップ クラスを追加します。

        テストを開始するためのクラスを Java ファイルの下に作成します。

public class School {
    public static void main(String[] args) {

    }
}


Bean オブジェクトの使用:

1. Bean オブジェクトを保存します。

        原則: Spring フレームワークには、Spring コンテキストを管理する spring-context と、オブジェクト モジュールを管理する spring-beans があります。

        Beanオブジェクトとは何ですか? プロジェクト内で再利用されるオブジェクトは Bean オブジェクトとみなすことができ、Bean オブジェクトを格納するとは、プロジェクトに必要なオブジェクトを Spring コンテナに入れることを意味します。

1.1 Bean の作成:

        次に、sayHi() メソッドが付属する通常の Student クラスを作成します。このクラスは今後頻繁に使用するため、Bean とみなすことができます。

public class Student {
    public void sayHi() {
        System.out.println("hi student");
    }
}

1.2 Bean をコンテナに格納します。

        ストレージ Bean は「宣言」の役割にも相当します。まず、リソース パッケージ内に作成した spring-config.xml 構成ファイルを開きます。

ストレージ Bean の形式:

<bean id="" class=""><bean>

Bean がマルチレベル パッケージ内にある場合は、クラス属性を設定するときにパスに注意してください。

次に Student クラスを Bean として追加します。パスに注意してください。

<!--    将Bean对象(com.spring.demo.com.spring.demo.Student)
存到 Spring容器中,它的 id 为 student-->
    <bean id="student" class="com.spring.demo.Student"></bean>

2. Bean オブジェクトを取得します。

        Bean オブジェクトの取得は、次の 3 つの手順に分かれています。

  1. Spring コンテキスト オブジェクトを取得します。Bean オブジェクトは管理のために Spring に渡されるため、コンテナを操作する権限を取得する前に、まず Spring を取得する必要があります。
  2. Spring コンテキストを通じてコン​​テナ内の Bean オブジェクトを取得します。
  3. Bean オブジェクトを使用します。

2.1 Spring コンテキストを作成します。

ここでは、 ApplicationContextBeanFactory という        2 つのインターフェースを理解する必要があります

        文法:

ApplicationContext context = 
                new ClassPathXmlApplicationContext("spring-config.xml");
 BeanFactory beanFactory =
                new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

2.2 指定された Bean オブジェクトを取得します。

        ここでは、ApplicationContext を使用してそれを示します。

public class School {
    public static void main(String[] args) {
        // 1.得到 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 2.获取指定 Bean 对象
        Student student = (Student) context.getBean("student");
        // 3.使用 Bean 对象
        student.sayHi();
    }
}

ここまでは、Spring の作成、Bean の保存と取得について基本的に紹介しました。


ApplicationContext と BeanFactory の違い:

        上記のコードでは、別の Teacher クラスを新しい Bean として追加し、それをコンテナーに追加します。

public class Teacher {
    public Teacher() {
        System.out.println("do teacher init");
    }

    public void sayHi() {
        System.out.println("hi teacher");
    }
}
    <bean id="student" class="com.spring.demo.Student"></bean>
    <bean id="teacher" class="com.spring.demo.Teacher"></bean>

この時点で、コンテナーには 2 つの Bean があります。1 つは Student で、もう 1 つは Teacher です。

        ApplicationContext と BeanFactory を使用してそれぞれ操作します。どちらもコンテナ内の Student Bean の取得を試みるだけで、その効果の違いを確認できます。

アプリケーションコンテキスト:

        元のコードは変更されません。 

public class School {
    public static void main(String[] args) {
        // 1.得到 Spring 上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        // 2.获取指定 Bean 对象
        Student student = (Student) context.getBean("student");
        // 3.使用 Bean 对象
        student.sayHi();
    }
}

ビーンファクトリー:

        新しいスタートアップ クラス School2 を作成し、Spring コンテキストを取得します。ApplicationContext は同じではないため、他方を変更する必要はありません。

public class School2 {
    public static void main(String[] args) {
        // 1.使用 BeanFactory 来获取 Spring 上下文 
        BeanFactory beanFactory =
                new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        // 2. 从 Spring 容器中获取 bean 对象
        Student student = (Student) beanFactory.getBean("student");
        student.sayHi();
    }
}

         実行結果を比較すると、どちらも ID が「student」の Bean オブジェクトを同時に取得して使用していることがわかりますが、ApplicationContext はコンテキストの Teacher も取り出しており、BeanFactory は Student のみを取得しています。

要約:

同じ点:

  • ApplicationContext と BeanFactory はどちらもコンテナ内の Bean オブジェクトを取得します。

違い:

  •  ApplicationContext はコンテナ内のすべての Bean オブジェクトを一度にロードして初期化し (hungry man モード)、BeanFactory は必要な Bean オブジェクトをロードします (lazy man モード)。
  • ApplicationContext は実際には BeanFactory のサブクラスであり、サブクラスは親クラスのすべての機能を継承するだけでなく、独自の機能も持ち、ClassPathXmlApplicationContext は ApplicationContext のサブクラスに属します。
  • BeanFactory も最初に設計されましたが、設計当初はマシンハードウェアのコストが高かったため、必要なオブジェクトだけをロードしていましたが、ApplicationContext は後から設計されました。可能な限り効率を向上させるために、人々は考えました。すべての Bean オブジェクトを一度にロードする。


一般的に使用される 3 つの getBean:

        getBean() メソッドには多くのオーバーロードがあります。一般的に使用される次の 3 つを比較してください。

  1. IDに従って取得します。
  2. オブジェクトタイプの取得。
  3. ID、オブジェクトタイプの取得。

ID で取得:

    <bean id="student" class="com.spring.demo.Student"></bean>
    <bean id="teacher" class="com.spring.demo.Teacher"></bean>
        // 2.获取指定 Bean 对象
        Student student = (Student) context.getBean("student");
        Teacher teacher = (Teacher) context.getBean("teacher");

このメソッドは明らかに失礼で望ましくないものであり、強制転送が行われ、さらに、id を通じて取得したオブジェクトが null の場合にも例外が発生します。

オブジェクトタイプの取得:

    <bean id="student" class="com.spring.demo.Student"></bean>
    <bean id="teacher" class="com.spring.demo.Teacher"></bean>
        // 2.获取指定 Bean 对象
        Student student = context.getBean(Student.class);
        Teacher teacher = context.getBean(Teacher.class);

この方法は失礼ではありませんが、問題があります。

        同じ種類の Bean がコンテナに 2 回登録されると、コンパイラは NoUniqueBeanDefinitionException を報告します。

ID + オブジェクトタイプの取得:

        この方法はより安全です。

    <bean id="student" class="com.spring.demo.Student"></bean>
    <bean id="student2" class="com.spring.demo.Student"></bean>

    <bean id="teacher" class="com.spring.demo.Teacher"></bean>
        // 2.获取指定 Bean 对象
        Student student = context.getBean("student2",Student.class);
        Teacher teacher = context.getBean("teacher",Teacher.class);

考察:
        同じタイプがコンテナー内に複数回登録される可能性があると述べましたが、それらは ID が異なるだけですが、それらは同じ空間を指しているのでしょうか?

        コードの検証:

    <bean id="student" class="com.spring.demo.Student"></bean>
    <bean id="student2" class="com.spring.demo.Student"></bean>

    <bean id="teacher" class="com.spring.demo.Teacher"></bean>
public class School {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
       
        Student student1 = context.getBean("student", Student.class);
        Student student2 = context.getBean("student2", Student.class);
       
        System.out.println(student1 == student2);
        System.out.println(student1.equals(student2));
    }
}

次に、それらが異なるオブジェクトへの参照であることを証明します。


要約:

Spring プロジェクトの作成と Bean の基本的な使用プロセス:

おすすめ

転載: blog.csdn.net/m0_65190367/article/details/130658114