Spring自動化組立bean


1.場面
DI(依存注入)はCD(Compect disc)とCDプレイヤー(CDPlayer)で説明します.
CDをCDPlayerに挿入(注入)しないと、CDPlayerはあまり使い道がないので、CD PlayerはCDに依存してこそ使命を果たせると言えます.
トップに戻る
2.アーキテクチャ図
トップに戻る
3.コード
インターフェース:Compect Disc.java
package soundsystem;public interface CompactDisc {  void play();
}
インターフェース:Media Player.java
package soundsystem;public interface MediaPlayer {  void play();
}
Sgt Peppers.java
package soundsystem;import org.springframework.stereotype.Component;

@Componentpublic class SgtPeppers implements CompactDisc {  private String title = "Sgt. Pepper's Lonely Hearts Club Band";  
  private String artist = "The Beatles";

  @Override  public void play() {
    System.out.println("Playing " + title + " by " + artist);
  }
  
}
注:Sgt Peppers類には@Component注を使用しています.この簡単な注釈は、このクラスがコンポーネントとして分類されることを示し、このクラスのためにSpringがbeanを作成することを知らせる.
CDPlayer.java
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;

@Componentpublic class CDPlayer implements MediaPlayer {  private CompactDisc cd;

  @Autowired  public CDPlayer(CompactDisc cd) {    this.cd = cd;
  }

  @Override  public void play() {
    cd.play();
  }

}
 
しかし、コンポーネントスキャンはデフォルトでは有効ではありません.Springを明示的に配置して、@Componentの注釈がある種類を探すように命令します.beanを作成していません.下の例では@ComponentScanコメントを使用していますが、この注釈はSpringでコンポーネントスキャンを有効にすることができます.他の構成がない場合、@ComponentScanはデフォルトでは設定と同じパッケージをスキャンします.
CDPlayer Config.java
package soundsystem;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScanpublic class CDPlayerConfig { 
}
 
CDPlayer Test.javaをテストします.
package soundsystem;import static org.junit.Assert.*;import org.junit.Test;import org.junit.contrib.java.lang.system.StandardOutputStreamLog;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4Cla***unner;

@RunWith(SpringJUnit4Cla***unner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)public class CDPlayerTest {

  @Autowired  private MediaPlayer player;
  
  @Autowired  private CompactDisc cd;
  
  @Test  public void cdShouldNotBeNull() {
    assertNotNull(cd);
  }

  @Test  public void play() {
    player.play();
  }

}
 自動組立とは、Springが自動的にbean依存を満たす方法であり、依存を満たす過程で、Springアプリケーションのコンテキストで、あるbeanニーズに合致する他のbeanを探している.自動組立を宣言するために、Springの@Autowiredによって注釈します.
上記のコードには、SpringがCDPlayer beanを作成する際に、このコンストラクタによって実装され、CompactDisc類に設定可能なbeanが入ってくることを示しています.上のコードの中で、SgtPeppersはコンポーネントとして宣言され、Compect Discインターフェースを実現しました.したがって、実際の運転ではSgtPeppersを実用化しています.