11.Component,Bean,Autowired,ComponentScan

MYUNGSUN·2024년 2월 28일
0

스프링부트

목록 보기
11/16

Component?

Component란 스프링 프레임워크에서 클래스를 식별하기 위한 어노테이션 중 하나이다.
주로 @Component 어노테이션을 사용하여 클래스를 컴포넌트로 지정한다.
컴포넌트는 스프링 애플리케이션의 구성 요소로, 스프링 컨테이너에 의해 생성되고 관리된다.

@Controller
@Service
@Repository

주로 mvc 클래스에 붙이는 어노테이션들이 컴포넌트라 할 수 있다.

Bean?

Bean은 스프링 컨테이너에 의해 관리되는 객체를 가리킨다. 스프링에서는 컴포넌트로 지정된 클래스를 스프링 빈으로 등록하여 관리한다. 이러한 빈은 스프링 컨테이너에 의해 생성, 관리되며 필요한 곳에서 주입되어 사용된다.

즉, 컴포넌트로 지정된 클래스들은 빈으로 지정된다고 볼 수 있다.

둘의 차이

컴포넌트는 빈이 되는거고, 반대로 빈은 컴포넌트가 될 수 없다.
빈은 객체가 되는거고, 컴포넌트는 클래스만 해당하기 때문이다.

Component Scan?

그렇다면 어떻게 스캔 하는 것 일까?

package hello.hellospring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

	public static void main(String[] args) {


		SpringApplication.run(HelloSpringApplication.class, args);
	}

}

package hello.hellospring;

이 패키지에 있는
@SpringBootApplication 어노테이션이 @ComponentScan 이라는 어노테이션을 갖고 있다. 그래서 hello.hellospring 패키지를 모두 스캔하게 된다.

추가로 ... Autowired

Autowired는 생성된 컴포넌트에 자동으로 붙어서 생성자 역할로 빈에 등록된다고 볼 수 있다.

Autowired를 안쓰면


public class MemberController {

    private final MemberService memberService;

    public MemberController() {
        this.memberService = new MemberService(new MemoryMemberRepository());
    }
}

이처럼 대참사나는 "의존성 인스턴스화"를 해야한다..

profile
백엔드

0개의 댓글

관련 채용 정보