💭 오늘의 학습 전략
# 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. 예전 프로젝트 코드가 필드 주입이었는데 요즘은 안 쓰는 방법이라는 걸 알았다ㅎㅎ
'공부기록 > TIL' 카테고리의 다른 글
2022/12/14 TIL | 모의 기술면접(2) (0) | 2022.12.14 |
---|---|
2022/12/12-13 TIL | AOP (0) | 2022.12.13 |
2022/12/07 TIL | Spring Framework 모듈 구성, SpringBoot (0) | 2022.12.07 |
2022/12/06 TIL | Spring Framework, 특징 (0) | 2022.12.06 |
2022/12/05 TIL | Learn Schema / SQL 과제 (0) | 2022.12.05 |
댓글