走査素子による注入依存性


📖 ✏️

  • TILシリーズの記事は「毎日学ぶ知識のかけらを記録する」です.これは、共有ではなく個人学習を記録するために作成されます.
  • の他のシリーズで作成された共有用のロケーションは、いつでも個別に作成されます.主に、TILシリーズで作成されたコンテンツから特定のトピックを選択し、より深い学習とまとめを行います.
  • 走査素子による自動注入依存性


    SpringBeanを登録する方法には、@Beanを使用する方法、XMLを使用する方法、およびコンポーネントスキャンの方法があります.登録が必要なスプリングシートが数百個に達すると、手動で登録するのは非常に面倒なことになります.漏れの問題も発生します.
    素子走査方式は、スプリングbeanを個別の設定情報がなくても自動的に登録することができる.また、依存関係を自動的に注入する@Autowired機能も提供されるので、スプリングbeanをより容易に管理することができる.

    1.構成部品スキャンの使用方法


    コンポーネントスキャンには@ComponentScanを使用します.構成部品スキャンを使用するには、まず@ComponentScanを構成情報に貼り付けます.コンポーネントスキャン@Componentコメントのあるクラスを名前でスキャンし、SpringBeanとして登録します.beanに登録したいクラスに@Componentを追加すればよい.
    依存関係注入@Autowiredを使用します.@Autowiredをbeanとして登録されているクラスのジェネレータに貼り付けると、スプリングコンテナは登録されているbeanでパラメータタイプに対応するインプリメンテーションボディを検索します.そして,依存関係注入を自動的に行う.
    構成部品スキャンの適用例コード
  • MemoryMemberRepository@Component付加
  • @Component 
    public class MemoryMemberRepository implements MemberRepository {}
  • RateDiscountPolicy@Component付加
  • @Component
    public class RateDiscountPolicy implements DiscountPolicy {}
  • MemberServiceImpl@Component,@Autowired追加
  • @Component
    public class MemberServiceImpl implements MemberService{
        private final MemberRepository memberRepository;
        @Autowired // 마치 ac.getBean(MemberRepository.class)와 같이 해당 타입으로 조회되는 Bean을 찾아서 등록한다.
        public MemberServiceImpl(MemberRepository memberRepository) {
            this.memberRepository = memberRepository;
        }
    }
    以下のコンポーネントスキャン構成情報ファイル(AutoAppConfig.class)によってスプリングコンテナを生成するテストにより、1トンのbean登録に関する内容と、@Autowiredを用いて依存関係注入を完了する内容がログに表示される.
    public class AutoAppConfigTest {
    
        @Test
        void basicScan() {
            ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
    
            MemberService memberService = ac.getBean(MemberService.class);
            assertThat(memberService).isInstanceOf(MemberService.class);
        }
    }
    ログを表示して、構成部品スキャンが正常に動作していることを確認します.

    2.素子走査の運動原理


    素子走査と自動依存注入がどのように動作するかを図により理解した.

    2-1. @ComponentScan

    @ComponentScanは、@Componentが貼られたすべてのクラスをspringbeanとして登録する.この場合springbeanのデフォルト名はクラス名です.しかし、一番前の字だけは小文字を使います.springbeanの名前を直接指定する場合は、@Component("사용할 이름")に指定できます.

    2-2. @自動注入Autowired依存関係


    ジェネレータに@Autowiredを指定すると、スプリングコンテナは、スプリングbeanのekを自動的に検索して注入します.この場合、デフォルトのクエリー・ポリシーでは、同じタイプの空を検索する方法が使用されます.getBean(클래스이름.class)と同じ方式と言える.

    生成者に多くのパラメータがある場合でも、問題なく自動注入を見つけることができます.

    サマリ

  • 要素スキャン方式は、@ComponentScanおよび@Componentのすべてのクラスをスプリングbeanとして登録する.
  • 依存注入は@Autowiredを用いた.ジェネレータに@Autowiredを追加すると、スプリングbeanに対応するパラメータのタイプが検索され、登録されます.
  • 素子スキャンでbeanに登録する場合、デフォルトではメソッド名が使用されます.ただし、先頭の文字のみを小文字に変更し、名前を保存します.名前を変更する場合は、@Component("원하는 이름")で別途指定できます.