目次
Spring Frameworkを介してオブジェクトを作成し、オブジェクトを取得します
コンポーネントスキャンにより、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コンテナのインスタンス化
(オブジェクトの作成方法)
ApplicationContextはBeanFactoryインターフェースを継承し、より多くのエンタープライズレベルのメソッドを持っています。このタイプを使用することをお勧めします。インスタンス化メソッドは次のとおりです
。//プロジェクトクラスパスの下に構成ファイルをロードし、
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);