スプリングの作成と使用
1、Springプロジェクトの作成
Maven メソッドを使用して Spring プロジェクトを作成します。Spring プロジェクトの作成はサーブレットと似ており、次の 3 つの手順に分かれています。
- 通常のMavenプロジェクトを作成する
- Spring フレームワークのサポートを追加 (spring-context、spring-beans)
- スタートアップクラスの追加
1.1、Maven プロジェクトを作成する
通常の Maven プロジェクトを作成する場合の注意点: プロジェクト名およびプロジェクト パスに中国語を含めることはできません。
Java ソースコードのルートディレクトリの色とリソースリソースディレクトリのロゴ画像が表示されたら、Maven プロジェクトが初期化されたことを意味します。
1.2、Spring フレームワークの依存関係を追加
プロジェクトの pom.xml にSpring Framework の依存関係 ( spring-context
dependency )を追加します。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 プロジェクトをリロードする必要があります。操作は次のとおりです。
External Libra
次の 6 つのライブラリがディレクトリに表示されたら、Spring-context
依存関係が正常に追加されたことを示します。
質問: pom.xml に依存関係を 1 つだけ追加しましたSpring-context
が、最終的に依存関係が 6 つあるのはなぜですか?
回答:Spring-context
依存関係の基礎となる実装は、他の 5 つのフレームワーク依存関係に依存するため、Spring-context
依存関係を追加すると、他の 5 つも追加されます。
1.3、スタートアップクラスを追加
Java ソース コードのルート ディレクトリ java の下にスタートアップ クラスを作成します。スタートアップ クラスには main メソッドのみを含める必要があります。
スタートアップ クラスの機能は、後で Spring コンテナから Bean を読み取る準備をすることです。
Maven プロジェクトが正常に作成されたかどうかをテストするには、main メソッドにテスト コードを記述し、コードが正常に実行できるかどうかで判断できます。
注: 上記のテスト コードは正常に実行でき、Maven プロジェクトが正常に作成および構成されたことを示しています。
2. ストレージ Bean
2.1、Beanオブジェクトを作成する
Bean オブジェクトは Java 言語の通常のオブジェクトですが、複数回呼び出して使用することができます。
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>
構成ファイルの概略図をリソース リソース ディレクトリに追加します。
設定ファイルを追加した後、Spring に Bean オブジェクトを登録できます。具体的な操作は、次の設定を追加することです。
注: id
Bean オブジェクトの名前とclass
Bean オブジェクトのパス (パッケージ名 + クラス名) を示します。
<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 構成を通じて取得します。ApplicationContext
ApplicationContext
注:ClassPathXmlApplicationContext
のパラメータ値は、configLocation
Spring 構成情報ファイル名と同じである必要があります。
3.2、指定されたBeanオブジェクトを取得する
指定されたBeanオブジェクトを取得するための要件: getBeanのパラメータ値のid
合計がclass
、指定されたBeanオブジェクトのid
合計に一致する必要がありますclass
。
Student student = context.getBean("student", Student.class);
指定された Bean オブジェクトのスケマティック ダイアグラムを取得します。
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オブジェクトを読み取って使用した合計の操作プロセスコードの実行結果:
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
印刷結果を実行します。
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
印刷結果を実行します。
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
、結果を出力します。
BeanFactoryt
(指定された Bean オブジェクトを取得する操作を使用して) を実行し、結果を出力します。
BeanFactoryt
(指定された Bean オブジェクトを取得する操作を使用して) を実行し、結果を出力します。
4. 2 つの方法の違いのまとめ
ApplicationContext : このメソッドは、Spring オブジェクトのコンテキストを取得するときに、Spring コンテナ内のすべての Bean オブジェクトをロードして初期化します。
メソッドの特徴: 比較的メモリを消費し、ロードは 1 回だけで、その後の Bean オブジェクトの読み込みと初期化の必要がなく、効率が高い。
BeanFactory : このメソッドは、getBean メソッドが呼び出されたときに、遅延ロードに属するすべての Bean オブジェクトではなく、対応する Bean オブジェクトのみをロードして初期化します。
メソッドの特徴: メモリの節約、遅延ロード、getBean が呼び出されたときのみ、対応する Bean オブジェクトがロードされて初期化されるため、効率的ではありません。
ApplicationContext
そしてBeanFactory
リンク:
ApplicationContext
どちらもBeanFactory
インターフェイスであり、使用時にそのサブクラスが呼び出されます。
2つの方式の比較と違い:継承機能と性能の2つの側面から比較して説明します。
- 継承関係と機能: BeanFactory はコンテナにアクセスするための基本的な機能を提供し、ApplicationContext は BeanFactory のサブクラスです。BeanFactory のすべての機能を継承することに加えて、独自の機能も備えており、国際化とリソースのサポートも追加されています。アクセスのサポートとイベント伝播サポート。
- パフォーマンスの観点: ApplicationContext はすべての Bean オブジェクトを一度にロードして初期化しますが、BeanFactory はどの Bean オブジェクトをロードして初期化する必要があるため、BeanFactory は軽量ですが効率的ではありません。
4.2、Bean オブジェクトを取得する 3 つの方法
1) 名前で取得
Student student = (Student) context.getBean("student");
このメソッドは 2 つの手順を経る必要があります。まず Bean オブジェクトを取得し、次に強制型変換によって対応する型に変換します。ただし、強制型変換では null ポインタ例外が発生しやすく、これはエレガントではありません。
Bean オブジェクト名が存在しない場合は、NoSuchBeanDefinitionException
例外がスローされます。
2) クラス名で取得
Student student = context.getBean(Student.class);
NoUniqueBeanDefinitionException
このメソッドには欠陥があり、spring-config.xmlに型を繰り返し登録した場合にはこのメソッドは使用できず、使用すると例外(非固有Bean例外)がスローされる。
3) 名前+クラス名で取得
この方法は、強制的な型変換によるnullポインタ例外問題を回避できるだけでなく、クラス名のみでBeanを取得することによる非固有Bean例外問題も回避できるため推奨されます。
Student student = context.getBean("student", Student.class);
この記事の概要
1. Spring を作成して使用するプロセスは何ですか?
回答: Spring の作成と使用のプロセスは、Spring プロジェクトの作成、Bean オブジェクトの保存、Bean オブジェクトの読み取りの 3 つのステップに分かれています。具体的なプロセスは次のとおりです。
1) Springプロジェクトの作成
- Maven プロジェクトを作成する
- Spring フレームワークの依存関係を追加 [spring-context]
- スタートアップクラスの追加 [機能:後でSpringコンテナからBeanを読み込むための準備]
2) ストレージ Bean
- Beanオブジェクトを作成する
- Springコンテナ[spring-config.xml設定ファイル]にBeanを登録する
3) 豆を読む
- Springオブジェクト[ApplicationContext, BeanFactory]を取得する
- SpringオブジェクトのgetBean()メソッドでBeanオブジェクトを取得【DI操作】
- 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つの方式の違い:継承機能と性能の面から比較して説明します。
- 継承関係と機能: BeanFactory はコンテナにアクセスするための基本的な機能を提供し、ApplicationContext は BeanFactory のサブクラスです。BeanFactory のすべての機能を継承することに加えて、独自の機能も備えており、国際化とリソースのサポートも追加されています。アクセスのサポートとイベント伝播サポート。
- パフォーマンスの観点: 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);