[Spring] 다양한 DI 방법

Minit88·2023년 4월 5일
0

Spring

목록 보기
5/16
post-thumbnail

1.자바 기반 컨테이너 설정

// DependencyConfig 클래스
컨텍스트를 인스턴스화할 때
@Configuration
public class DependencyConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

위 코드처럼 DependecyConfig 클래스를 생성해 @Configuration 애너테이션을 붙여 컨테이너임을 정의함과 동시에 싱글톤 기능을 부여한다.

AnnotationConfigApplicationContext를 사용하여 스프링 컨테이너를 인스턴스화

  • @Configuration 클래스가 입력으로 제공되면 @Configuration 클래스 자체가 Bean 정의로 등록되고 클래스 내에서 선언된 모든 @Bean 메서드도 Bean정의로 등록
public static void main(String[] args) {
    ApplicationContext ctx = new AnnotationConfigApplicationContext(DependencyConfig.class);
    MyService myService = ctx.getBean(MyService.class);
    myService.doStuff();
}

2. XML을 이용한 Component scan

XML방식의 component scan

<beans>
    <context:component-scan base-package="탐색할 폴더 주소"/>
</beans>
  • XML에 위 코드를 추가하면, @Component가 붙은 모든 클래스를 스프링 빈으로 등록해주게 된다.
    • 의존 관계도 자동으로 주입하는 @AutoWired 기능도 제공한다.

Component scan


  • @AutoWired는 주입이 필요한 객체에 컨테이너 생성 시 의존성 자동 주입이 이루어진다.
  • 의존성 관계는 MemberRepository -> MemberService 으로 이루어진다.

컴포넌트 스캔 기본 대상

  • @Component : 컴포넌트 스캔에서 사용
  • @Controller & @RestController : 스프링 MVC 및 REST 전용 컨트롤러에서 사용
  • @Service : 스프링 비즈니스 로직에서 사용
    • 특별한 처리x
    • 개발자들이 핵심 비즈니스 로직이 여기에 있다는 비즈니스 계층을 인식하는데 도움이 됨
  • @Repository : 스프링 데이터 접근 계층에서 사용
    • 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환
  • @Configuration : 스프링 설정 정보에서 사용
    • 스프링 설정 정보를 인시갛고, 스프링 빈이 싱글톤을 유지하도록 추가
profile
" To be BE "

0개의 댓글