OneK-2
Published 2024. 7. 17. 16:52
스프링 빈과 주요 어노테이션 Spring

전에 스프링 빈 등록과 관련된 글을 작성한 적이 있다.
오늘은 그때 사용한 컴포넌트에 대한 내용을 적어보려 한다.

 

@Component

해당 클래스를 스프링 빈으로 등록한다.

 

@ComponentScan

원래는 설정 파일을 xml에 다 작성해야 했는데, 스프링과 스프링부트는 xml을 최소화 하고자 했다.

@ComponentScan은 @Component를 스캔하여 빈으로 등록해주는 역할을 한다.

 

@Autowired

스프링 컨테이너에서 필요한 타입을 찾아 의존성을 주입해준다.

 

import org.springframework.stereotype.Component;

@Component
public class Person {
    House house;

    public Person(House house) {
        this.house = house;
        System.out.println(house.getName() + " 집을 샀습니다.");
    }
}
import org.springframework.stereotype.Component;

@Component
public class House {
    private String name;

    public House() {
        this.name = "Default House";
        System.out.println("Created House Bean");
    }

    public String getName() {
        return name;
    }
}

 

위 코드에 대한 3가지 질문과 답변

 

1. 누가 먼저 스프링 빈이 되나

House가 먼저 된다. House가 있어야 Person 생성이 가능하기 때문

 

2. 스프링은 뭘 보고 Person이 필요한 House를 넣어줬을까?

컴포넌트가 있는 클래스에 생성자가 하나밖에 없으면, @Autowired가 숨어있음.

스프링이 생성자에 있는 House라는 객체 타입을 보고 넣어줌.

스프링 빈은 타입으로 구별된다.

 

3. 우린 스프링한테 House 객체가 필요하니까 넣어줘 라고 얘기한 적이 있나?

생성자가 한개일 때, @Autowired가 생략되어 있기 때문에, 스프링에 얘기했다고 볼 수 있음.

 

결론

@Component @ComponentScan @Autowired를 IoC와 DI로 설명해 본다면?

IoC는 객체의 제어권을 스프링에 위임하는 것인데, @Component를 사용하여 스프링 빈으로 등록하여 관리한다. @ComponentScan은 이러한 @Component들을 찾는 역할을 하며, 이때 DI가 필요한 경우, @Autowired를 사용하여, 의존성을 주입해준다.

'Spring' 카테고리의 다른 글

왜 DTO를 사용하는가?  (1) 2024.07.22
Gradle Dependecies  (0) 2024.07.19
Web서버 vs WAS  (1) 2024.07.16
[스프링 입문] AOP  (0) 2023.01.21
[스프링 입문] JPA  (0) 2023.01.21
profile

OneK-2

@인문학여행

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그