スイープエレメント


*인프런 김영한 강사님의 강좌를 참고하여 정리한 내용입니다.*

スプリングコンテナに空の登録をします。


これまでspringbinを登録するためにjavaコードの@beanを使用したり、XMLのを介して直接構成情報にspringbinを登録したりしてきました!

でも。


登録するspringbinが数十、数百個あると、いちいち登録するのが難しく、設定情報が大きくなるにつれて漏れが出る可能性があります!
このため、ばねに情報が設定されていなくても、ばね片を自動的に登録する素子スキャン機能と、依存関係を自動的に注入する@Autowired機能が提供される.
@Configurationは自動的にコンポーネントスキャンのターゲットとなり、特定のソースコードを表示すると@Componentコメントが添付されていることがわかります.

@ComponentScanと@Autowired


<従来のスプリング空席登録方法>

@Configuration
public class AppConfig {

	@Bean
    public MemberSerivce memberService() {
    ...

<@ComponentScanと@Autowiredを使用してスプリングシートを登録>


1.構成情報を記述するクラス

@Configuration
@ComponentScan
public class AppConfig {
}

2.@Beanとして登録されているメソッドの各クラスに@Componentを追加します。

@Component
public class MemberServiceImpl implements MemberService {
	...
@Component
public class MemoryMemberRepository implements MemberRepository {
	...
@Component
public class RateDiscountPolicy implements DiscountPolicy {
	...
などなど.

3.依存関係を注入するクラスに@Autowiredを使用します。

@Component
public class MemberServiceImpl implements MemberService {
	
    // 인터페이스에 의존하며 어떤 구현체가 주입될지는 모른다! (DIP 의존관계 역전 원칙)
    private final MemberRepository memberRepository;
    
    // 생성자의 type에 따라 스프링 컨테이너에 등록된 같은 타입의 클래스를 자동으로 의존관계 주입해준다.
    @Autowired
    public MemberServiceImpl(MemberRepository memberRepository) {
    	this.memberRepository = memberRepository;
    }
既存の方法では,@Beanを直接使用して構成情報を作成し,依存関係を宣言したが,現在は構成情報自体がないため,依存関係注入もクラスで解決する必要がある.

オペレーションプロセス


1. @ComponentScan



@ComponentScanは@Componentを持つすべてのクラスをSpringBinとして登録します.
@Beanのように@Component(「xxx」)を使って空の名前を付けることができます!

2. @Autowired



@Componentクラスの作成者に@Autowiredを指定すると、スプリングコンテナは自動的にスプリング空席を検索して入力します.(同じタイプのギャップを見つけて注入)
スプリング空容器のMemoryMemberRepositoryは、MemberRepositoryを継承するため、パラメータMemberRepositoryと同じタイプです.DiscountPolicyもそうです

構成部品スキャンのナビゲーション位置とデフォルトのスキャンターゲット


すべてのjavaクラスがコンポーネントスキャンを行うには時間がかかる場合があります.したがって、必要な場所からナビゲートを開始するために開始位置を設定できます.

basePackges

@ComponentScan {
	basePackages = "hello.core",
}
参照するパッケージの開始位置を指定し、そのパッケージを含むすべてのサブパッケージを参照します.複数のパッケージの開始位置を指定することもできます.

basePackageClasses

@ComponentScan {
	basePackagesClasses = AppConfig.class,
}
指定したクラスのパッケージをナビゲーションの開始位置として指定します.AppConfigはHelloコアパッケージに含まれている場合は、そのパッケージをナビゲーションの開始位置として指定します.
ナビゲーション位置のDefault値は@ComponentScan付きの設定情報クラスのパケットを先頭とする.
プロジェクトマスター設定情報は、プロジェクトを表す情報ですので、プロジェクト起動ルートの位置に置くことが望ましいです.したがって、パッケージの場所を指定せずに、設定情報クラスの場所をプロジェクトの上部に置くことをお勧めします.
Spring Bootを使用して開始情報@SpringBootApplicationをプロジェクトの開始ルートに配置するのが慣例です.@SpringBootApplication@ComponentScanを含む!
コンポーネントスキャンには@Componentだけでなく、以下の追加内容も含まれています.
  • @ユニット:素子走査用
  • @Controller:スプリングMVC用コントローラ
  • @Service:スプリングビジネスロジック用
  • @Repository:スプリングデータアクセス層用
  • @配置:スプリング設定情報用