【JavaEE Advanced】Springの作成と利用

ここに画像の説明を挿入

スプリングの作成と使用


1、Springプロジェクトの作成

Maven メソッドを使用して Spring プロジェクトを作成します。Spring プロジェクトの作成はサーブレットと似ており、次の 3 つの手順に分かれています。

  1. 通常のMavenプロジェクトを作成する
  2. Spring フレームワークのサポートを追加 (spring-context、spring-beans)
  3. スタートアップクラスの追加

1.1、Maven プロジェクトを作成する

通常の Maven プロジェクトを作成する場合の注意点: プロジェクト名およびプロジェクト パスに中国語を含めることはできません。

画像-20230707094943941

Java ソースコードのルートディレクトリの色とリソースリソースディレクトリのロゴ画像が表示されたら、Maven プロジェクトが初期化されたことを意味します。

画像-20230707095538477

1.2、Spring フレームワークの依存関係を追加

プロジェクトの pom.xml にSpring Framework の依存関係 ( spring-contextdependency )を追加します。xml 構成は次のようになります。

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

プロジェクトの pom.xml 構成ファイルに依存関係を追加した後spring-context、更新ボタンをクリックして Maven プロジェクトをリロードする必要があります。操作は次のとおりです。

画像-20230707100320326

External Libra次の 6 つのライブラリがディレクトリに表示されたら、Spring-context依存関係が正常に追加されたことを示します。

画像-20230707100551575

質問: pom.xml に依存関係を 1 つだけ追加しましたSpring-contextが、最終的に依存関係が 6 つあるのはなぜですか?

回答:Spring-context依存関係の基礎となる実装は、他の 5 つのフレームワーク依存関係に依存するため、Spring-context依存関係を追加すると、他の 5 つも追加されます。

1.3、スタートアップクラスを追加

Java ソース コードのルート ディレクトリ java の下にスタートアップ クラスを作成します。スタートアップ クラスには main メソッドのみを含める必要があります。

スタートアップ クラスの機能は、後で Spring コンテナから Bean を読み取る準備をすることです。

画像-20230707101025123

Maven プロジェクトが正常に作成されたかどうかをテストするには、main メソッドにテスト コードを記述し、コードが正常に実行できるかどうかで判断できます。

画像-20230707101614936

注: 上記のテスト コードは正常に実行でき、Maven プロジェクトが正常に作成および構成されたことを示しています。


2. ストレージ Bean

2.1、Beanオブジェクトを作成する

Bean オブジェクトは Java 言語の通常のオブジェクトですが、複数回呼び出して使用することができます。

画像-20230707102220350

2.2、Spring に Bean を登録する

操作手順: Spring 設定ファイルをリソースリソースディレクトリに追加しspring-config.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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
</beans>

構成ファイルの概略図をリソース リソース ディレクトリに追加します。

画像-20230707103329843

設定ファイルを追加した後、Spring に Bean オブジェクトを登録できます。具体的な操作は、次の設定を追加することです。

画像-20230707103611886

注: idBean オブジェクトの名前とclassBean オブジェクトのパス (パッケージ名 + クラス名) を示します。

<bean id="student" class="org.example.Student"></bean>

上記の表現の意味は、Bean (org.example.Student) を Spring コンテナに格納し、その名前を と呼びますstudent


3. ビーンを読む

3.1、Spring コンテキストを取得する

Springコンテキストオブジェクトの取得を利用することができApplicationContex、作成時にSpringの構成情報を設定する必要がある。

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

説明:サブクラスClassPathXmlApplicationContextに属し、すべての機能を備えており、Spring コンテナ内のすべての Bean オブジェクトを XML 構成を通じて取得します。ApplicationContextApplicationContext

画像-20230707104530977

注:ClassPathXmlApplicationContextのパラメータ値は、configLocationSpring 構成情報ファイル名と同じである必要があります。

3.2、指定されたBeanオブジェクトを取得する

指定されたBeanオブジェクトを取得するための要件: getBeanのパラメータ値のid合計がclass、指定されたBeanオブジェクトのid合計に一致する必要がありますclass

Student student = context.getBean("student", Student.class);

指定された Bean オブジェクトのスケマティック ダイアグラムを取得します。

画像-20230707110153870

3.3、Bean オブジェクトの使用

student.sayHi();

Bean オブジェクトを読み取って使用するための全体的な操作プロセス コードは次のとおりです。

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

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

Beanオブジェクトを読み取って使用した合計の操作プロセスコードの実行結果:

画像-20230707110725900


4. その他の注意事項

4.1、Spring コンテキストを取得する 2 つの方法

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

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

ApplicationContextオペレーションコードを実行します。

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

ApplicationContext印刷結果を実行します。

画像-20230707112101914

2)ビーンファクトリー

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

BeanFactoryオペレーションコードを実行します。

public static void main(String[] args) {
    
    
    //1,获得Spring对象上下文
    BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
    //2,获取指定的Bean对象
    Student student = beanFactory.getBean("student", Student.class);
    //3,使用Bean对象(非必须)
    student.sayHi();
}

BeanFactoryt印刷結果を実行します。

画像-20230707112157734

3) 2 つの方法の違い

1. Studentクラス(Beanオブジェクト)を用意する

public class Student {
    
    
    public Student(){
    
    
        System.out.println("do student init!");
    }

    public void sayHi(){
    
    
        System.out.println("Hi student!");
    }
}

2、Teacherクラス(Beanオブジェクト)の準備

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

    public void sayHi(){
    
    
        System.out.println("Hi teacher!");
    }
}

3. 2 つの方法の比較

(指定された Bean オブジェクト操作を取得せずに)を実行しApplicationContext、結果を出力します。

画像-20230707113429506

BeanFactoryt(指定された Bean オブジェクトを取得する操作を使用して) を実行し、結果を出力します。

画像-20230707113921760

BeanFactoryt(指定された Bean オブジェクトを取得する操作を使用して) を実行し、結果を出力します。

画像-20230707114511703

4. 2 つの方法の違いのまとめ

ApplicationContext : このメソッドは、Spring オブジェクトのコンテキストを取得するときに、Spring コンテナ内のすべての Bean オブジェクトをロードして初期化します。

メソッドの特徴: 比較的メモリを消費し、ロードは 1 回だけで、その後の Bean オブジェクトの読み込みと初期化の必要がなく、効率が高い。

BeanFactory : このメソッドは、getBean メソッドが呼び出されたときに、遅延ロードに属するすべての Bean オブジェクトではなく、対応する Bean オブジェクトのみをロードして初期化します。

メソッドの特徴: メモリの節約、遅延ロード、getBean が呼び出されたときのみ、対応する Bean オブジェクトがロードされて初期化されるため、効率的ではありません。

ApplicationContextそしてBeanFactoryリンク:

ApplicationContextどちらもBeanFactoryインターフェイスであり、使用時にそのサブクラスが呼び出されます。

画像-20230707185048579

2つの方式の比較と違い:継承機能と性能の2つの側面から比較して説明します。

  1. 継承関係と機能: BeanFactory はコンテナにアクセスするための基本的な機能を提供し、ApplicationContext は BeanFactory のサブクラスです。BeanFactory のすべての機能を継承することに加えて、独自の機能も備えており、国際化とリソースのサポートも追加されています。アクセスのサポートとイベント伝播サポート。
  2. パフォーマンスの観点: ApplicationContext はすべての Bean オブジェクトを一度にロードして初期化しますが、BeanFactory はどの Bean オブジェクトをロードして初期化する必要があるため、BeanFactory は軽量ですが効率的ではありません。

4.2、Bean オブジェクトを取得する 3 つの方法

1) 名前で取得

Student student = (Student) context.getBean("student");

このメソッドは 2 つの手順を経る必要があります。まず Bean オブジェクトを取得し、次に強制型変換によって対応する型に変換します。ただし、強制型変換では null ポインタ例外が発生しやすく、これはエレガントではありません。

Bean オブジェクト名が存在しない場合は、NoSuchBeanDefinitionException例外がスローされます。

画像-20230707115428718

2) クラス名で取得

Student student = context.getBean(Student.class);

NoUniqueBeanDefinitionExceptionこのメソッドには欠陥があり、spring-config.xmlに型を繰り返し登録した場合にはこのメソッドは使用できず、使用すると例外(非固有Bean例外)がスローされる。

画像-20230707123153944

3) 名前+クラス名で取得

この方法は、強制的な型変換によるnullポインタ例外問題を回避できるだけでなく、クラス名のみでBeanを取得することによる非固有Bean例外問題も回避できるため推奨されます。

Student student = context.getBean("student", Student.class);

この記事の概要

1. Spring を作成して使用するプロセスは何ですか?

回答: Spring の作成と使用のプロセスは、Spring プロジェクトの作成、Bean オブジェクトの保存、Bean オブジェクトの読み取りの 3 つのステップに分かれています。具体的なプロセスは次のとおりです。

1) Springプロジェクトの作成

  1. Maven プロジェクトを作成する
  2. Spring フレームワークの依存関係を追加 [spring-context]
  3. スタートアップクラスの追加 [機能:後でSpringコンテナからBeanを読み込むための準備]

2) ストレージ Bean

  1. Beanオブジェクトを作成する
  2. Springコンテナ[spring-config.xml設定ファイル]にBeanを登録する

3) 豆を読む

  1. Springオブジェクト[ApplicationContext, BeanFactory]を取得する
  2. SpringオブジェクトのgetBean()メソッドでBeanオブジェクトを取得【DI操作】
  3. Beanオブジェクトを使用する[必須ではありません]

Spring の作成と使用のプロセスの概略図:


2. 春を手に入れる 2 つの方法? 違い?

1) ApplicationContext : Spring オブジェクトのコンテキストを取得すると、Spring コンテナ内のすべての Bean オブジェクトがロードされて初期化されます。

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

2) BeanFactory : getBean メソッドが呼び出された場合にのみ、すべての Bean オブジェクトではなく、対応する Bean オブジェクトがロードされて初期化されます。

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"))

3) 2つの方式の違い:継承機能と性能の面から比較して説明します。

  1. 継承関係と機能: BeanFactory はコンテナにアクセスするための基本的な機能を提供し、ApplicationContext は BeanFactory のサブクラスです。BeanFactory のすべての機能を継承することに加えて、独自の機能も備えており、国際化とリソースのサポートも追加されています。アクセスのサポートとイベント伝播サポート。
  2. パフォーマンスの観点: ApplicationContext はすべての Bean オブジェクトを一度にロードして初期化しますが、BeanFactory はどの Bean オブジェクトをロードして初期化する必要があるため、BeanFactory は軽量ですが効率的ではありません。

3. Bean オブジェクトを取得する 3 つの方法?

1) 名前による取得: 欠陥があり、キャストが必要で、キャストでは null ポインター例外が発生する傾向があります。

Student student = (Student) context.getBean("student");

2) クラス名による取得:不具合があり、同じ型のBeanオブジェクトが複数ある場合、NoUniqueBeanDefinitionException例外がスローされます(非ユニークBean例外)。

Student student = context.getBean(Student.class);

3) 名前 + クラス名で取得: 上記の問題を回避するために推奨されます。

Student student = context.getBean("student", Student.class);

おすすめ

転載: blog.csdn.net/m0_64338546/article/details/131620968