[인프런 워밍업 클럽 스터디] 6일차 - 스프링 컨테이너의 의미와 사용 방법
[정리] Section 3. 역할의 분리와 스프링 컨테이너
좋은 코드가 왜 중요한지 이해하고, 원래 있던 Controller 코드를 보다 좋은 코드로 리팩토링 한다.
스프링 컨테이너와 스프링 빈이 무엇인지 이해한다.
스프링 컨테이너가 왜 필요한지, 좋은 코드와 어떻게 연관이 있는지 이해한다.
스프링 빈을 다루는 여러 방법을 이해한다.
클래스 : 객체를 정의해놓은 설계도. 객체를 생성하기 위해 사용된다.
객체 : 클래스에 정의된 내용이 인스턴스화되어 실제로 생성된 것. 설계도를 통해 만들어진 집.
인스턴스(화) : 클래스를 실제로 사용할 수 있도록 생성하는 것.
스프링 빈 (UserController에 @RestController를 붙여줌으로써 스프링 빈이 됨)
서버가 시작되면 스프링 서버 내부에 거대한 컨테이너(클래스 저장소)를 만든다.
컨테이너 안에는 클래스가 들어간다.
이 때 다양한 정보도 함께 들어있고, 인스턴스화도 이루어진다.
이때 스프링 컨테이너 안으로 들어간 클래스를 스프링 빈이라고 한다.
JdbcTemplate도 스프링 빈으로 등록되어 있다. (Dependency가 등록해 주고 있음)
스프링 컨테이너는 필요한 클래스를 연결해준다.
서버가 시작되면 일어나는 일
스프링 컨테이너(클래스 저장소)가 시작된다.
기본적으로 많은 스프링 빈들이 등록된다.
우리가 설정해 준 스프링 빈이 등록된다.
이 때 필요한 의존성이 자동으로 설정된다.
스프링 빈을 등록하는 방법
@Configuration
클래스에 붙이는 어노테이션
@Bean을 사용할 때 함께 사용해야 한다.
@Bean
메소드에 붙이는 어노테이션
메소드에서 반환되는 객체를 스프링 빈에 등록한다.
@Service - @Repository 사용할 때
개발자가 직접 만든 클래스를 스프링 빈으로 등록할 때
@Configuration - @Bean 사용할 때
외부 라이브러리, 프레임워크에서 만든 클래스를 등록할 때
알아볼 어노테이션
@Component
주어진 클래스를 '컴포넌트'로 간주한다. 이 클래스들은 스프링 서버가 뜰 때 자동으로 감지된다.
@Qualifier
스프링 빈에 이름을 지정함으로써 특정 클래스를 가져옴
스프링 빈을 가져오는 방법
(가장 권장) 생성자를 이용해 주입받는 방식 : @Autowired 생략 가능
setter와 @Autowired 사용 : 누군가 setter를 사용하면 오작동 할 수 있다.
필드에 직접 @Autowired 사용 : 테스트를 어렵게 만드는 요인이다.
참고자료 : https://mihee0703.tistory.com/182
댓글을 작성해보세요.