ばね容器


🔷 ばね容器


🔸 ApplicationContextインタフェースをスプリングコンテナと呼びます.
🔸 XMLベース、構文ベースでJava設定クラスを作成できます.
🔸 BeanFactory、ApplicationContextに分けることができます.
ApplicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

🔷 せいせいてつづき

  • スプリングコンテナ
  • を作成する.
    new AnnotationConfigApplicationContext(AppConfig.class);
  • スプリングコンテナの内部には、空の名前(キー)と空のオブジェクト(値)からなる空のリポジトリがあります.
  • で指定された設定情報(パラメータとして受信したAppConfig.class)を使用してスプリングシートを登録します.
    (すべての@Beanを呼び出して空のリポジトリに保存)
  • 設定情報を参照して依存関係を注入する.
  • 🔸 空を直接登録する場合は、依存関係を作成して注入するには、一度処理します.
    @Configuration
    public class AppConfig{
    
      @Bean
      public MemberService memberService(){
          return new MemberRepository(memberRepository);
          }
    🔸 ただし,自動登録であれば依存関係の生成と注入のステップは2段階に分けて行われる.

    🔷 クエリコンテナに登録されている空の

    ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름을 조회
    
    ac.getBean(빈이름, 타입) : 빈 이름, 타입으로 빈 객체(인스턴스)를 조회
      ➡️ 조회대상 빈이 없으면 NoSuchBeanDefinitionException 발생
       
    * ac.getBean("memberService", MemberServiceImpl.class);
      ➡️ 구체 타입으로 조회할 수도 있지만, 변경 시 유연성이 떨어진다.
         (추상화(역할)에 의존하는 것이 아닌 구현에 의존하는 것.)

    🔹 同じタイプの空が複数ある場合


    🔸 NoUniqueBeanDefinitionExceptionオカレンス
    void findBeanByName(){
        MemberRepository memberRepository =
                            ac.getBean("memberRespository1", MemberRepository.class);
    }
    ➡️ 같은 타입의 빈이 여러 개 있을 경우, 빈 이름을 지정해 줘야 한다.
    🔸 すべての特定のタイプを表示
    void findAllBeanByType(){
    	Map<String, MemberRepository> beansOfType = 
                                           ac.getBeansOfType(MemberRepository.class);
        for(String key : beansOfType.keySet()){
        	System.out.println("key = " + key + ", value = " + beansOfType.get(key));
        }
        System.out.println("beansOfType = " + beansOfType);
    }

    🔹 空の継承関係の表示


    🔸 親のタイプで検索すると、子供のタイプも一緒に検索されます.Objectタイプ別にクエリーすると、すべてのスプリングシートがクエリーされます.
    🔸 複数のサブアイテムがある場合は、NoUniqueDefinitionExceptionが表示されます.
    空の名前を指定するか、特定のサブタイプでクエリーするだけです.
    🔸 親タイプ(Object)ですべて表示
    void findAllBeanByObjectType() {
       Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
       for (String key : beansOfType.keySet()) {
    		System.out.println("key = " + key + 
                                                " value=" + beansOfType.get(key));
           }
      }
    https://www.inflearn.com/course/スプリング-コア-原理-基本編#