2022/12/08-09 TIL | DI

    반응형

    💭 오늘의 학습 전략

    # DI

    Spring container과 Bean

     Bean Scope

    Java 기반 컨테이너 설정 (인스턴스화)

     ◻ @Configuration

     ◻ @Bean

     ◻ Singleton

    @ComponentScan

     ◼ 스캔 대상

     다양한 의존관계 주입 방법

    🌼 학습한 것들

    ◾ Spring container

     - 내부에 존재하는 애플리케이션 Bean 생명주기 관리

    ex)
    ApplicationContext ac = new AnnotationCoinfigApplicationContext(DependencyConfig.class);

     - Spring container는 파라미터로 넘어온 설정 클래스 정보를 사용해서 Bean 등록

     - BeanFactory: Spring container 최상위 인터페이스(Bean 관리/검색)

     - ApplicationContext: BeanFactory 상속. 그 외 부가 기능(메세지 기반 다국어 처리, 이벤트 관련 기능 제공 등)

    Bean

     - POJO. Spring container에 의해 관리되는 재사용 인스턴스

     - getBean()을 통한 직접적인 접근 금지 ==> IoC위반. 객체를 알고 있어야 하고, 다 수정해야 하고 ...

     - BeanDefinition: 빈 설정 메타정보

       추상화 되어있기 때문에 해당 정보는 어떻게 작성해도 상관 없어야 한다(class, xml ... ) side effect X

    ◾ BeanScope: 빈 존재 범위

     - Spring default: Singleton

       그 외 prototype, request 등등....

     - Singleton scope: 해당 Bean의 인스턴스가 한 개만 생성되는 것 보장

       한 객체에 여러 객체가 의존하고 있을 수도 있으니

       => "Only one instance is ever created and this same shared instance is injected into each collaborating object."

    ◾ @ComponentScan

     - 설정 정보에 @ComponentScan => @Component 붙은 클래스를 Bean으로 등록

     - BasePackage: 탐색할 패키지 시작 위치의 동일/하위 패키지 스캔

       지정하지 않으면 @ComponentScan 붙은 설정정보 클래스가 시작

       Spring Boot -> @SpringBootApplication에 @ComponentScan 포함

     - 기본 대상: @Component, @(Rest)Controller, @Service, @Repository, @Configuration

     * 수동으로 스프링 객체로 관리해야 함을 명시해야 할 때 Bean 붙인다. ==> 대표적으로 외부 라이브러리

    다양한 의존관계 주입 방법

     - 생성자 주입: 생성자에 @Autowired, 생성자 한 개면 자동 주입, 주입 받는 필드 "final" 선언 가능

       순환참조 감지(컴파일 시점에 인지 가능), NPE 방지

     - 수정자(Setter)주입: set필드명() 선택과 변경 가능성이 있는 의존관계에

     - 필드 주입, 일반 메서드 주입

    🔥 보충이 필요한 것들

    ◾추상화된 부분들을 다시한 번 생각해봐야 할 것 같다.

     

     

    💨 하루를 마치며

    1. 스프링 기초부터 짚고 갈 수 있어서 너무너무너무 좋다. 학습 전략부터 보이다시피 집중해서 공부해야 할 내용들이 정말 많았는데 정말 기초를 모르고 사용해왔구나 하는 후회와 잘 해보자는 다짐이... 교차한닷

    2. 혼자 공부할 때는 이해 안 되는 부분이 굉장히 많았는데 마무리 세션에서 도식화된 구조랑 설명을 같이 들으니까 이해가 쏙쏙 됐다.

    3. "잘못된 습관, 개념(남들 다 이렇게 쓰니까) -> 따라잡는 속도 느려진다ㅠ" 라는 메모를 남겨놓았는데 뼈저리게 느낀다......

    4. 내용을 100% 이해한 건 아니지만 꼭 알고 넘어가야 하는 부분 그리고 대부분 이해해서 굉장히 다행스럽다.

    5. 역시 모르고 사용하는 것과 알고 사용하는 것은 천지차이이다.

    6. 예전 프로젝트 코드가 필드 주입이었는데 요즘은 안 쓰는 방법이라는 걸 알았다ㅎㅎ

    반응형

    댓글