チュートリアルの春シリーズ
- 春のフレームワークの紹介
- 春のフレームワークモジュール
- 春の開発環境を構築する(エクリプス)
- シンプルなSpringアプリケーションを作成します。
- コントロールのコンテナの春反転(制御の反転 - IOC)
- おくる依存性注入(DI - 依存性注入)
- 豆のXML構成は(1) - XMLの設定によってBeanのロード
- 豆XMLコンフィギュレーション(2) - 豆の範囲およびライフサイクル・コールバック・メソッドの構成
- 豆のXML構成(3) - コンフィギュレーションの依存性注入
- 豆のXML設定(4) - 自動組立
- 豆の注釈(アノテーション)の設定(1) - アノテーションによってBeanのロード
- 豆アノテーション(注釈)の構成(2) - 豆の範囲およびライフサイクル・コールバック・メソッドの構成
- 豆アノテーション(注釈)の構成(3) - コンフィギュレーション依存性注入
- ビーンJavaの設定
- 春のアスペクト指向プログラミング(AOP)
- 春のイベント(1) - 内蔵のイベント
- 春のイベント(2) - カスタムイベント
注釈を通じて、道ビーン間のコンフィギュレーションの依存ノート:@Autowired
。
春が持つすべてのスキャン@Component
クラスのノートを、そして豆として登録し、その後で春を見つける@Autowired
変数コメント、豆注入を頼るように。
使用@Autowired
注釈依存性の注入は、次の3つの方法を:
- コンストラクタ・インジェクション
- セッター・インジェクション
- フィールド注入
依存クラスはすでにそれ以外の場合は、注入することができない、ビーンが設定されていることを確認します。
私たちは、次のカテゴリのとおりです。
Database.java
package com.qikegu.demo;
import org.springframework.stereotype.Component;
@Component
public class Database implements Service {
@Override
public String name() {
return "数据库名称:MySQL";
}
@Override
public void run() {
System.out.println("数据库正在运行");
}
@Override
public void stop() {
System.out.println("数据库已经停止");
}
}
Logger.java
package com.qikegu.demo;
import org.springframework.stereotype.Component;
@Component
public class Logger implements Service {
@Override
public String name() {
return "Logger X";
}
@Override
public void run() {
System.out.println("Loggery已经准备好");
}
@Override
public void stop() {
System.out.println("Logger已经停止");
}
}
Mail.java
package com.qikegu.demo;
import org.springframework.stereotype.Component;
@Component
public class Mail implements Service {
@Override
public String name() {
return "邮件收发";
}
@Override
public void run() {
System.out.println("邮件收发正在运行");
}
@Override
public void stop() {
System.out.println("邮件收发已经停止");
}
}
1.コンストラクタ・インジェクション
使用する@Autowired
注釈項目コンストラクタ依存性注入クラスを。
App.java
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class App {
private Service mainService;
private Service[] services;
public App(){
}
/*
// 构造方法注入
@Autowired
public App(@Qualifier("logger") Service main){
this.setMainService(main);
}
*/
// 构造方法注入
@Autowired
public App(Service[] services){
this.setServices(services);
}
public Service getMainService() {
return mainService;
}
public void setMainService(Service mainService) {
this.mainService = mainService;
}
public Service[] getServices() {
return services;
}
public void setServices(Service[] services) {
this.services = services;
}
}
注:自動組立のための唯一のコンストラクタ。
- 質問1:あなたは、パラメータの型コンストラクタが見ることができる
Service
インターフェイスである、それはそれを注入するクラスを実現します。このインスタンスそのうちいくつかの実装クラスを、持っていますか?
唯一の実装クラス場合は、デフォルトでは、このクラスを注入します。
実装複数のクラスがある場合は、使用必要が@Qualifier("bean_id")
明示的に指定された注釈を。指定しない場合、Springコンテナは一致が見つからない場合は、例外がスローされ、実装クラスに応じて変数名と一致します。
以下のためにpublic App(Service[] services)
サービスの配列:春は、クラス注射のすべてのインスタンスを実現します。
- 質問2:どのような方法でSpringコンテナは、Beanの一致しますか?
デフォルトでは、使用するデータの種類(byType)、ある@Qualifier
名前(BYNAME)によって、注釈の間。
2.セッターメソッド・インジェクション
コール@Autowired
注入の依存関係を注釈付きのセッターメソッド。
App.java
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class App {
private Service mainService;
private Service[] services;
public App(){
}
public Service getMainService() {
return mainService;
}
// Setter方法注入
@Autowired
@Qualifier("logger")
public void setMainService(Service mainService) {
this.mainService = mainService;
}
public Service[] getServices() {
return services;
}
@Autowired
public void setServices(Service[] services) {
this.services = services;
}
}
実際には、いずれかと@Autowired
注釈を付け方法、あなたは依存関係だけではなく、セッターメソッドを注入することができます。
// Setter方法注入
@Autowired
@Qualifier("logger")
public void anyMethod(Service mainService) {
this.mainService = mainService;
}
3.フィールドインジェクション
使用して、オブジェクトのフィールド@Autowired
の注入依存アノテーションを。
App.java
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class App {
// 字段注入
@Autowired
@Qualifier("logger")
private Service mainService;
// 字段注入
@Autowired
private Service[] services;
public App(){
}
public Service getMainService() {
return mainService;
}
public Service[] getServices() {
return services;
}
}
- 質問:これは良いです依存性注入、のいくつかのタイプを述べていますか?
それは、自分の好みを見て、独自の利点があり、プロジェクト全体の一貫性を選択してください
注釈値を注入することにより、
セッター依存性注入に加えて、コンストラクタ、メソッド、およびフィールドを使用する方法は、注射はまた、値であってもよいです。
App.java
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class App {
// 使用@Value注解注入值
@Value("1024")
private int id;
public App(){
}
// 使用@Value注解注入值
public App(@Value("1024") int id){
this.id = id;
}
public int getId() {
return id;
}
// 使用@Value注解注入值
@Value("1024")
public void setId(int id) {
this.id = id;
}
}