Back-end/Spring

[Spring] 빈(Bean) 주입 받는 방법 가장 쉬운 예시

shoney9254 2023. 3. 15. 17:24
반응형

스프링에서 빈을 주입 받는 방법은 크게 3가지로 구분 됩니다. 

1. 생성자 주입(Constructor Injection) - 권장 

2.세터 주입(Setter Injection)

3.필드 주입(Field Injection)

 

위 3가지에 대한 가장 간단한 예시를 알아봅시다. 

 

1. 생성자 주입 (권장)

 생성자 주입은 스프링에서 가장 권장하는 주입 방법입니다. 생성자를 통해 의존성을 주입받기 때문에 객체가 생성될 때 필요한 의존성을 모두 주입받아 안전하게 사용할 수 있습니다. 주입 받을 객체를 생성자의 매개변수로 선언하면 됩니다.

 예를 들어, 다음과 같이 생성자를 통해 의존성을 주입받을 수 있습니다.

public class MyService {
    private final MyRepository myRepository;

    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}

추가적으로, 롬복(lombok)을 사용한다면 @RequiredArgsContructor로 생성자를 표현 안해도 주입되기 때문에 미관(?)상 좋습니다.

 

2. 세터 주입(Setter Injection)

 세터 주입은 생성자 주입과는 달리 세터 메서드를 통해 의존성을 주입받는 방법입니다. 세터 메서드는 주입 받을 객체를 매개변수로 받아 필드에 저장합니다.

 세터로 주입을 하게 되면 세터 메서드 자체가 외부에서 변경 가능하기 때문에, 세터 주입은 권장하지 않습니다.

 예를 들어, 다음과 같이 세터 메서드를 통해 의존성을 주입받을 수 있습니다.

public class MyService {
    private MyRepository myRepository;

    public void setMyRepository(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}

 

 

3.필드 주입(Field Injection)

 필드 주입은 클래스의 필드에 직접 의존성을 주입받는 방법입니다. 생성자나 세터 메서드를 사용하지 않아도 되기 때문에 코드가 간결해지지만, 객체 생성 시점에 의존성이 없을 경우 NullPointer 예외가 발생할 수 있기 때문에 권장되는 방법은 아닙니다.

 예를 들어, 다음과 같이 필드를 통해 의존성을 주입받을 수 있습니다.

public class MyService {
    @Autowired
    private MyRepository myRepository;
}

 @Autowired 어노테이션은 스프링이 해당 타입의 빈을 자동으로 주입해주는 역할을 합니다. 이 방법은 스프링에서만 지원하는 방법이므로 다른 프레임워크와의 호환성이 떨어질 수 있습니다.

반응형