카테고리 없음

[Spring] 의존성을 주입하는 방법

빠작 2023. 7. 26. 12:17

의존성을 주입하는 방법은 3가지가 있다.

 

1. 생성자 주입

@component 어노테이션과 @Autowired 어노테이션의 조합이다.

@Service
public class NodeEditService {
    @Autowired
    private final NodeRepository nodeRepository;
    @Autowired
    private final BoardRepository boardRepository;

    public NodeEditService(NodeRepository nodeRepository, BoardRepository boardRepository) {
        this.nodeRepository = nodeRepository;
        this.boardRepository = boardRepository;
    }

리턴되는 객체를 final로 설정할 수 있다는 장점이 있다. final로 선언된 변수는 생성자에서 초기화해야 하기 때문에, 코드 작성 과정에서 실수로 의존성 주입을 해주지 않으면 컴파일 에러가 뜬다. 따라서 오류를 쉽게 잡을 수 있다.

 

그리고 주입되는 객체의 생성자가 1개밖에 없다면 @Autowired 어노테이션은 생략해도 좋다.

보통 롬북을 많이 사용하는데, 롬북의 @RequiredArgsConstructor 어노테이션은 객체의 생성자를 1개만 자동 생성해준다. 따라서 객체에 저 어노테이션을 붙이고, 의존성을 주입할 때 @Autowired를 생략하는 방식으로 많이 이용한다.

 

2. 필드 주입

객체를 선언하고 @Autowired 어노테이션을 위에 붙여주면 된다. 하지만 잘 사용되지 않는 방법이다.

@Service
public class BoardService {
    @Autowired
    private BoardRepository boardRepository;

 

3. 수정자 주입

@component 어노테이션과 @Autowired 어노테이션의 조합이다. 하지만 생성자 주입과 달리 final로 선언할 수 없다.

따라서 선언하는 시점에 초기화할 수 없다. 또한, setter을 public으로 선언하기 때문에 혹시 객체를 수정할 가능성이 있다는 단점도 존재한다.

@Service
public class BoardService {
    
    private BoardRepository boardRepository;
    
    @Autowired
    public void setBoardRepository(BoardRepository boardRepository){
    	this.boardRepository=boardRepository
    }

 

따라서 1번 생성자 주입 방식이 가장 많이 사용되고 있다.