스프링 컨테이너 자동 의존관계 설정

박찬섭·2024년 3월 1일

스프링

목록 보기
2/14

스프링 컨테이너
의존관계 설정

스프링 컨테이너

리액트가 컴포넌트의 생명주기를 유지하는 것 처럼
스프링 컨테이너는 자바 객체의 생명 유지를 관리하고, 의존성 주입을 수행한다.

의존성 주입
의존성 주입은 객체간의 결합도를 낮추고 다형성을 지원한다는 장점이 있다.
의존성 주입 방법에는 크게 3가지가 있다.
1. 필드 주입
2. 생성자 주입
3. setter 주입

위 3개의 방법중 2번 생성자 주입을 가장 많이 사용한다.
1번의 경우 2번, 3번과 다르게 아예 처음부터 고정이다.
3번의 경우에는 동적으로 의존성 주입이 바뀔 수 있다.
따라서 2번처럼 생성시에 원하는 것을 주입하고 그 뒤로는 바뀌지 않게 하는 방법이 가장 좋다.

2번 예시

//case1
public class example {
	Test test = new Test()
}

//case2
public class example {
	Test test;
   	public void example(Test test) {
    	this.test = test
    }
}

위 코드에서 test를 클래스 내부에서 new로 생성하는 것과 외부에서 test를 집어 넣는 것과 다르다.

의존관계 설정

스프링 컴포넌트 스캔 등록

@Controller
@RestController
@Service
@Repository
컨트롤러, 서비스, 레포지토리 부분에서 위 어노테이션을 달 경우 스프링 컨테이너에 자동 등록

컨테이너에 자동 등록 후 의존성 주입을 위해서
@AutoWired
스프링 컨테이너에 등록된 컴포넌트끼리 의존성 주입이 필요한 곳에 작성시 의존성 연결


자바를 통해 등록

package com.example.post;

import com.example.post.model.repository.HashMapPostRepository;
import com.example.post.model.repository.PostRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    @Bean
    public Repository repository() {
        return new testRepository(service());
    }
    
    @Bean
    public Service service() {
        return new testService();
    } 
}

컨트롤러의 경우 컴포넌트 자동 등록, 자바를 통한 등록과 상관없이 어노테이션을 달아서 컴포넌트 등록을 해야 한다.

컴포넌트 자동 등록의 경우 정형화된 컨트롤러, 서비스, 레포지토리등에서 사용하면 된다.
자바를 통한 등록의 경우 구현체가 추후에 바뀌는 등 작업을 하면서 부품 처럼 구현체를 바꿔 넣어줘야 하는 경우에 사용하면 편리하다.

profile
백엔드 개발자를 희망하는

0개의 댓글