Java Xiaobai実践マニュアル-フェーズ5-Spring Framework(day01)

目次

春の紹介

春とは

なぜSpringを使うのですか?

Springフレームワークの役割

春の主な機能

Spring Frameworkを介してオブジェクトを作成し、オブジェクトを取得します

Spring容器

前書き

SpringContainerの紹介

Springコンテナのインスタンス化

スプリングコンテナの使用

Beanのコンテナ管理

Beanのインスタンス化

Beanの命名

Springが管理するスコープオブジェクトから

Beanスコープ

Beanライフサイクルコールバック

オブジェクトライフサイクル管理による春

Beanの遅延インスタンス化

コンポーネントスキャンにより、Springはクラスのオブジェクトを管理できます


春の紹介

春とは

  • Springはオープンソースの軽量アプリケーション開発フレームワークであり、その目的はエンタープライズレベルのアプリケーション開発を簡素化し、煩わしさを軽減することです。
  • Springが提供するIOCおよびAOP機能は、コンポーネントの結合、つまりデカップリングを最小限に抑えることができます。これは、システムの将来の保守およびアップグレードに便利です。
  • Springは、システム全体のソリューションを提供します。開発者は、独自に提供する機能を使用できるだけでなく、アプリケーションをサードパーティのフレームワークやテクノロジーと統合し、開発に使用するテクノロジーを自由に選択できます。
     

なぜSpringを使うのですか?

Springの本質は、ソフトウェアでオブジェクトを管理することです。つまり、オブジェクトの作成とオブジェクトの保守の関係です。
 

Springフレームワークの役割

Springフレームワークの主な役割は、オブジェクトを作成および管理することです。

オブジェクトを作成します:に似ていますUser user = new User();

オブジェクトの管理:Springフレームワークを介していつでもオブジェクトを取得できます。Springフレームワークでさえ、オブジェクトのプロパティに値を割り当てるのに役立ちます。


春の主な機能

Spring Frameworkを介してオブジェクトを作成し、オブジェクトを取得します

Eclipse Mavenプロジェクト作成さ、Create the Simple Project Aの作成プロセスフック中にグループIDの塗りつぶしはcn.teduアーティファクトIDの塗りつぶしはspring01です。

プロジェクトが他のプロジェクトで使用されない場合は、プロジェクトが独立して実行できることを確認するだけで済みます。実際グループIDアーティファクトIDの値は重要ではありません。

作成が成功したら、最初に上記の構成pom.xmlに追加します。

次に、プロジェクト名をマウスの右ボタンでクリックし、[ Maven] > [プロジェクトの更新]を選択して、Mavenを更新します。現在の環境ではJava1.8が使用されます

次に、Springフレームワーク必要な依存関係コードpom.xmlに追加する必要がありますspring-context

Spring容器

前書き


SpringContainerの紹介

  • Springでは、JavaクラスとJavaBeanはすべてBeanとして扱われ、これらのBeanはコンテナによって管理および使用されます。
  • SpringコンテナはIOCおよびAOPメカニズムを実装しており、Beanオブジェクトの作成とBeanオブジェクト間の分離を簡素化できます。
  • Springコンテナには、BeanFactoryとApplicationContextの2つのタイプがあります。

JavaBeanとは:Spring
を使用する場合のシンプルで標準化されたJavaオブジェクト
JavaBeanオブジェクトを管理する必要がある場合に使用できます。Springは最も簡潔なオブジェクト管理ソリューションの1つです。
 

オブジェクト作成する方法とオブジェクト間の関係  を管理する方法
 


Springコンテナのインスタンス化

オブジェクトの作成方法

ApplicationContextBeanFactoryインターフェースを継承し、より多くのエンタープライズレベルのメソッドを持っています。このタイプを使用することをお勧めします。インスタンス化メソッドは次のとおりです
。//プロジェクトクラスパスの下に構成ファイルをロードし、
String conf = "applicationContext.xml";をインスタンス化します
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);


Springの使い方は?

  • 構成とデフォルトのルールに基づいて、Springによって定義されたルールに準拠し、コードの記述を減らします


スプリングコンテナの使用

  • 基本的に、BeanFactoryとApplicationContextは、Beanの定義と相互依存性を維持する単なる高レベルのファクトリインターフェースです。BeanFactoryおよびApplicationContextを介してBean定義にアクセスできます。
  • まず、コンテナ構成ファイルapplicationContext.xmlにBean定義を追加します。
  • <bean id = "identifier class =" Beanタイプ "/>
  • 次に、BeanFactoryおよびApplicationContextコンテナオブジェクトを作成した後、getBean(Beanのインスタンスを取得するメソッド)を呼び出します。
  • getBean( "識別子")


Beanのコンテナ管理


Beanのインスタンス化

  • SpringコンテナでBeanオブジェクトを作成する方法は3つあります
  • コンストラクターを使用してインスタンス化します(強調)
  • 静的ファクトリメソッドを使用してインスタンス化する
  • インスタンスファクトリメソッドを使用してインスタンス化する

Springにオブジェクト作成ルールについて教えてください。Springはオブジェクトの作成を支援します。構成とデフォルトのルールに基づいて、コードの記述を減らします。


Beanの命名

Beanの名前
Springコンテナでは、各Beanに名前(つまり識別子)が必要です。名前は<bean>要素のidまたはname属性を使用して、定義された
Bean
としてBeanのエイリアスを指定できます。次に、別の名前を追加します。参考までに、<​​alias>を使用して
<alias name = "fromName" alias = "toName '/>を指定できます。

 

特定のクラスのオブジェクトを管理するためにSpringが必要な場合は、カスタムクラスを使用して構成できます。

たとえば、Springフレームワークにクラスのオブジェクトを管理させるという要求があります。Date

最初プロジェクトのcn.tedu.springパッケージにBeansクラス作成し、このクラスのメソッドをカスタマイズしますDateメソッドの戻り値の型はである必要があります。次に、メソッド本体にDateオブジェクトを作成して返します。

package cn.tedu.spring;

import java.util.Calendar;
import java.util.Date;
import java.util.Random;

import org.springframework.context.annotation.Bean;

public class Beans {

	@Bean
	public Date a() {
		return new Date();
	}
	
	@Bean
	public Random rrr() {
		return new Random();
	}

	@Bean
	public Calendar ccc() {
		return Calendar.getInstance();
	}
	@Bean
	public User uuu() {
		return new User();
	}
}

package cn.tedu.spring;

public class User {
	
	
}

 

上記で使用されているパッケージ名はカスタムであり、必須ではありません。

上記のカスタムメソッドについて:

  • public権限を使用する必要があります

  • 戻り値の型は、Springで管理する必要のあるオブジェクトの型です。

  • メソッド名はカスタマイズできます。

  • パラメータリストは一時的に空です。

  • @Beanアノテーションを追加する必要があります

次に、実行するクラスを作成し、上記のクラスをロードして、オブジェクトを取得できます。

package cn.tedu.spring;

import java.util.Calendar;
import java.util.Date;
import java.util.Random;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Demo {
	public static void main(String[] args) {
		// 1.加载配置类 获取Spring 容器
		AnnotationConfigApplicationContext ac 
			= new AnnotationConfigApplicationContext(Beans.class);
		
		// 2.从 Spring 容器中获取对象
		Date date = (Date)ac.getBean("a");//getBean() 获取去参数时 配置对象的方法名称
		
		Random random = (Random) ac.getBean("rrr");
		Calendar calender = (Calendar) ac.getBean("ccc");
		User user =(User) ac.getBean("uuu");
		
		//3.测试
		System.out.println(date);
		System.out.println(random);
		System.out.println(calender);
		System.out.println(user);
		
		//4.关闭
		ac.close();
		
	}
}

上記のコードを実行すると、出力オブジェクトが表示されます。

上記のBeansクラスでは、構成オブジェクトのメソッド名はですa。実行中のDemoクラスでgetBean()は、呼び出し元のメソッドのパラメーターもである"a"必要があり、名前は一貫している必要があります。

パス、特定の値を取得するメソッドの名前はである必要がgetXxxあるためBeans上記のクラスのメソッドは次のように変更する必要があります。

ただし、メソッド名が変更さgetDateれるとgetBean( )呼び出されたメソッドのパラメーターも実行時getDate変更する必要があります。次に例を示します。

明らかに、これgetDate名前を意味し、名前は接頭辞として動詞の代わりに名詞を使用する必要があります!

この問題を解決したい場合は、@Bean注釈にパラメーター構成できます。次に例を示します。

概要:実行時、呼び出されたgetBean()メソッドのパラメーター値は、デフォルトでは、構成オブジェクトのメソッドの名前です。構成オブジェクトのメソッドの@Beanアノテーションパラメーターを追加する場合、getBean()メソッドのパラメーターは、@Beanアノテーション!

実際、Springは、上記の構成オブジェクトのメソッド名として名詞を直接使用することをお勧めします。つまりdate、メソッド名getDateとしてではなく、メソッド名として使用することをお勧めしますこの名詞はgetBean()メソッドのパラメーターとして使用されます。結局のところ、メソッドが定義された後、Springフレームワークによって呼び出されます。開発者が自分でメソッドを呼び出す必要はありません。getBean()セマンティクスを確保ながらコードを簡素化するために。コードの中で、メソッドとして名詞を使用することをお勧めします。

 

Springが管理するオブジェクトの範囲

Springによって管理されるオブジェクトは、デフォルトではシングルトンです。構成オブジェクトのメソッドの前に、補足追加の@Scope注釈とメモをprototype時間に合わせて構成する必要がある場合、それはその1つの例ではありません。例えば:

注:スプリングモードとシングルトンモードは2つの異なる概念です!

複数の注釈を同時に使用する必要がある場合、各注釈の順序は区別されません。

 

シングルトンの場合、Springによって管理されるオブジェクトはデフォルトで空腹です!レイジースタイルに調整する場合は、オブジェクトメソッドを構成するメソッドの前に@Lazyアノテーションを追加します

 

Beanスコープ

SpringコンテナがBeanをインスタンス化すると、次のスコープを持つBeanオブジェクトを作成できます。



Beanライフサイクルコールバック

  • 初期化コールバックメソッドを指定します
  • シングルトンモードBeanにのみ適用可能な破棄コールバックメソッドを指定します
  • ヒント:破棄コールバックメソッドを指定します。これはシングルトンモードのBeanにのみ適用されます。
  • Springはオブジェクトの作成プロセスを管理します
     

Springが管理するオブジェクトのライフサイクル

ライフサイクル:オブジェクトが作成から最終的な破壊まで通過するコース!

通常、ライフサイクルについて話し合う必要がある場合、対応するデータ型のオブジェクトは開発者自身によって維持されません。

コンテナによって維持されるオブジェクトはコンテナによって作成され、そのメソッドのいくつかは適切なタイミングで呼び出されます。開発者が行う必要があるのは、「特定の条件が満たされたときに実行する必要があるタスクを決定する」ことです。つまり、「コンテナはいつ実行するかを決定し、開発者は実行時に何をするかを決定します」。

学習ライフサイクルの意味は、「いつ何をする必要があるかを知ること」です!

たとえばServlet、ライフサイクルにはいくつかの特別なメソッドがあり、特定の状況下で呼び出されます。これらはライフサイクルメソッドと呼ばれます。

  • init( )Servletオブジェクトが作成されると、すぐに1回だけ実行されます。このメソッドは、初期化関連のコードを記述するのに適しています。

  • service( ):一致するリクエストを受信すると、それが呼び出され、リクエストが受信された回数だけメソッドが実行されます。

  • destroy( )Servletオブジェクトが破棄される前に実行され、1回だけ実行される場合、このメソッドは、閉じるなどの終了関連のコードを記述するのに適しています。

Springフレームワークを使用する場合、特定の種類のオブジェクトが管理のためにSpringフレームワークに渡されます。次に、これらのオブジェクトが作成されるとき、オブジェクトが破棄されるとき、および作成と破棄のプロセス中に特定のコードを実行する必要があります。ある程度、手に負えない!

Springフレームワークでは、ユーザーはクラス内でそれぞれ「初期化メソッド」と「破棄メソッド」を表す最大2つのメソッドをカスタマイズできます。また、Springフレームワークは、オブジェクトの作成後に初期化メソッドを自動的に呼び出し、破棄メソッドは次のようになります。オブジェクトが破壊される前に呼び出されます!メソッドの定義について:

  • アクセス権限:権限を使用する必要がありpublicます;

  • 戻り値のタイプ:use void;

  • メソッド名:カスタム;

  • パラメータリスト:空。

たとえば、Userクラス内の2つのライフサイクルメソッドをカスタマイズします。

次に、オブジェクトを構成するメソッドの前に、@Beanこれら2つのメソッドをアノテーションのライフサイクルメソッドとして構成します

 

Beanの遅延インスタンス化

  • ApplicationContextに実装されているデフォルトの動作は、起動時にすべてのシングルトンBeanを事前にインスタンス化することです。
  • ApplicationContextの初期化時にシングルトンBeanを事前にインスタンス化したくない場合は、<bean>要素のIazy-init = "true"属性を使用して変更できます。
  • 遅延初期化されたBeanは、最初に使用されたときにインスタンス化されます
  • <bean id = "exampleBean" lazy-init = "true"
  •   class = "com.foo.ExampleBean" />
  • トップレベルの<beans />要素のdefault-lazy-init属性は、コンテナ内のすべての<bean>の遅延インスタンス化機能を指定できます。
  • 使用頻度の低いシングルトンオブジェクトに適しています

 

コンポーネントスキャンにより、Springはクラスのオブジェクトを管理できます

Userクラスがあり、フレームワークと管理オブジェクトを作成するにはSpringである必要があると仮定すると、最初Userにクラスパッケージが配置されていることをクリアしてから、操作のクラスDemoで、AnnotationConfigApplicationContextコンストラクターメソッド、パッケージ名をパラメーターとしてコンストラクター、例:

 

//1.加载配置类 获取Spring 容器
		AnnotationConfigApplicationContext ac =
				new AnnotationConfigApplicationContext("cn.tedu.spring");

上記のコードは「コンポーネントスキャン」を意味します。実行されると、Spring Frameworkは指定されたパッケージのすべてのコンテンツをスキャンし、各コンポーネントのオブジェクトを自動的に作成および管理します。

もちろん、すべてではないクラスは「ある要素」。あなたは「としてクラスを識別したい場合はコンポーネント」、あなたが追加する必要があり@Component、アノテーションをクラスの宣言の前に例えば:

 

package cn.tedu.spring;

import org.springframework.stereotype.Component;
//组件
@Component
public class User {
	
}

Springコンテナからオブジェクトを取得する場合、デフォルトでは、クラス名の最初の文字がBeanの名前として小文字に変更されます。これは、次のようにgetBean()メソッドパラメータを呼び出すために使用されます

User user = ac.getBean("user",User.class);

Beanの名前については、たとえば、クラス名の最初の文字が大文字で、2番目の文字が小文字の場合、UserまたはStudent、Beanの名前を小文字に変更できます。つまり、userまたはstudentこの条件が満たされない場合、たとえば、クラス名はteacherまたはIUserDao、Beanの名前はクラスの名前です!

 

Springフレームワークでは、カスタマイズされた名前が@Componentアノテーションパラメーターで構成されている限り、Beanの名前をカスタマイズすることもできます。次に例を示します。

package cn.tedu.spring;

import org.springframework.stereotype.Component;

@Component("stu")
public class Student {
	public void Student() {
		System.out.println("Student.Student()");
		// Java Bean:
	}
}

上記のクラスのオブジェクトがSpringによって管理されている場合、Beanの名前はです"stu"。その後、getBean()メソッド呼び出してオブジェクトを取得するときは、この名前を使用してオブジェクトを取得する必要があります。

	Student student = ac.getBean("stu", Student.class);

 

おすすめ

転載: blog.csdn.net/c202003/article/details/107040568