반응형
이전에 @Configuration, @Bean을 사용해 DI를 했던 것을 더 간단하게 줄여보겠다.
컴포넌트 스캔
- 설정 정보가 없어도 자동으로 스프링 빈으로 등록하는 기능
다음과 같이 설정 정보에 @ComponentScan을 붙이면 컴포넌트 스캔을 사용할 수 있다. 컴포넌트 스캔은 @Component가 붙은 클래스를 스프링 빈으로 등록해준다. 이전처럼 설정정보에 @Bean을 붙여주지 않아도 되므로 간단해진다! 스프링 빈으로 등록할 클래스에 모두 @Component를 붙여주면 컴포넌트 스캔의 대상이 된다.
@Configuration
@ComponentScan // @Component가 붙은 클래스를 스프링 빈으로 등록해준다
public class AutoAppConfig {
}
@Component // 스프링 빈으로 등록할 클래스라는 의미
public class MemoryMemberRepository implements MemberRepository{
// ...
}
의존관계 자동 주입
이전에는 설정 정보에서 의존관계를 주입을 해주었는데, 위의 코드처럼 바꾸면 의존관계가 주입되지 않는다. 그렇다면 의존관계를 어떻게 주입해줘야 할까?
@Configuration
public class AppConfig {
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
바로 @Autowired를 사용하면 자동으로 의존관계를 주입해준다. 스프링 컨테이너가 해당 스프링 빈을 찾아서 주입해준다.
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
// ...
}
@RequiredArgsConstructor를 사용하면 위 코드를 더 줄일 수 있다. final이 붙은 필드들을 모아 생성자를 자동으로 만들어준다. 따라서 자동으로 의존관계가 주입된다.
@Component
@RequiredArgsConstructor // final이 붙은 필드의 생성자를 자동으로 만들어준다
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}
반응형
'Back-end > Spring' 카테고리의 다른 글
[SpringBoot] 엔티티 매핑, 연관관계 매핑 (0) | 2022.02.06 |
---|---|
[Spring] 영속성 컨텍스트 (0) | 2022.01.26 |
SOLID 적용하여 리팩토링하기 (0) | 2022.01.10 |
객체 지향 프로그래밍과 SOLID (0) | 2022.01.08 |
[SpringBoot] 10주차 스터디(AOP, 트랜잭션) (0) | 2021.10.23 |