[Japring-Study 6] spring-core-1

Kim yohan·2024년 8월 14일

JapringStudy

목록 보기
6/12
post-thumbnail

Spring bean, component 등에 대해 배울 수 있었다!


@Component vs @Bean

@Component@Bean
클래스 레벨에 사용메소드 레벨에 사용
사용자가 직접 접근이 가능한 클래스에 사용사용자가 컨트롤 불가능한 외부 클래스를 다룰 때 사용

DI 방법

Field Injection

  • 장점 : 보기 쉽고, 사용하기 편하다.
  • 단점
    • 의존성을 추가하기 너무 쉬워서, 무한정 추가할 수 있다.
    • 의존성이 숨는다. 클래스는 제공된 의존성 또한 책임져야 하는데, Field Injection은 숨은 의존성만 제공한다. Setter, Constructor을 통해 확실한 커뮤니케이션이 되어야한다.
    • DI Container가 없어도 독립적으로 Instance화 할 수 있는 단순 POJO여야 하는데, 그렇지 않다.
    • final을 선언할 수 없어서, 객체가 변할 수 있다.
    • 순환 의존성을 체크할 수 없다.

Setter Injection

  • 장점
    • 상황에 따라 선택적으로 의존성을 주입한다.
    • 의존관계 주입을 런타임 시에 할 수 있도록 낮은 결합도
  • 단점
    • 주입이 필요한 객체가 주입이 되지 않아도, 객체가 생성된다. 주입이 되지 않고, 메소드를 호출하면, NullPointerException이 발생한다.

Constructor Injection

Spring Framework Reference에서 권장하는 방법

  • 장점
    • 필수적으로 사용해야하는 의존성 없이는 Instance 만들지 못하게 강제할 수 있음
    • final 사용 가능
    • 순환 의존성을 알 수 있다. 컴파일 단계에서 잡아낼 수 있다.

@ComponentScan

  • @ComponentScan은 해당 어노테이션이 작성된 패키지 이하의 클래스들을 순회하며 빈으로 등록될 객체들을 탐색한다.
  • 스캔 대상 : @Component, @Service, @Repository, @Controller, @Configuration
  • SpringBoot는 @SpringBootApplication이 @ComponentScan을 들고 있어서, 따로 설정해줄 필요가 없다.
  • 패키지 범위를 설정할 수 있고, 포함, 제외 범위를 설정할 수 있다.
profile
꾸준히 성실하게

0개의 댓글