한 면만 쓴 종이 2022. 8. 5. 10:47

[인프런] 스프링 핵심 원리 - 기본편

 

@Component

@Autowired

 

 

📍 일일이 스프링 빈을 등록하는 것은 누락, 귀찮음 등의 문제 발생시킴!

@Configuration
@ComponentScan(excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class))
// 기존 코드를 수정하지 않고 남겨두기 위해 exclude함

public class AutoAppConfig {
}

📎 @ComponentScan

         : @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록함

         : 사용하는 각 클래스에 @Component를 붙이면 됨

 

📎@Autowired

        : 자동으로 의존관계 주입을 해줌

            ↪ 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입

        : 생성자에서 여러 의존관계도 한 번에 주입하는 것 가능

        : 기본 조회 전략은 타입이 같은 빈을 찾아서 주입하는 것 (getBean(MemberRepository.class))와 동일하다고 이해

@Component
public class MemberServiceImpl implements MemberService{
    private final MemberRepository memberRepository;

    @Autowired
    public MemberServiceImpl(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
```

 

 

📎모든 자바 컴포넌트를 전부 스캔하면 시간이 오래 걸리게 됨 => basePackages: 탐색 시작 위치 지정 가능

📎패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단(프로젝트 시작 루트 위치)에 두는 것을 권장

📎com.hello에 AppConfig 같은 메인 설정 정보를 두고, @ComponentScan 을 붙이는 방식

📎스프링 부트를 사용하면 @SpringBootApplication을 프로젝트 시작 루트 위치에 두는 것이 관례(여기에 @ComponentScan이 들어있음)

@ComponentScan(
    basePackages = "hello.core.member",
)

📌@ComponentScan은 다음을 추가로 포함하고 있음

@Component : 컴포넌트 스캔에서 사용

@Controller : 스프링 MVC 컨트롤러로 인식

@Service : 스프링 비즈니스 로직에서 사용

@Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해줌

@Configuration : 스프링 설정 정보로 인식

@Service : 특별한 처리를 하지 않음. 개발자들이 핵심 비즈니스 로직의 위치 인식에 도움을 주는 용도

 

📌필터

includeFilters : 컴포넌트 스캔 대상을 추가로 지정

excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정