본문 바로가기

SpringBoot

SpringBoot - @Autowired 이해

반응형

1. 정의

Spring 프레임워크에서 **@Autowired**는 객체 의존성을 자동으로 주입하는 기능을 제공하는 어노테이션이다. 스프링의 IoC (Inversion of Control) 컨테이너는 빈(Bean)을 관리하고 런타임 시에 객체들 간의 의존성을 관리하는데, **@Autowired**는 이러한 의존성을 자동으로 해결해주는 역할을 한다.

**@Autowired**를 사용하면, 스프링 컨테이너는 해당 타입의 빈을 찾아서 자동으로 필드, 생성자, 메서드의 매개변수 등에 해당 빈을 주입해준다. 이를 통해 개발자는 빈들 간의 의존성을 직접 해결하는 것이 아니라 스프링 컨테이너에게 의존성 관리를 위임할 수 있다.

2. 특징

  1. @Autowired에 연결된 변수의 클래스가 @Component가 달린 클래스인 경우, 스프링이 오브젝트를 생성해 넘겨준다.
  2. @Bean 어노테이션으로 생성하는 오브젝트인 경우 @Bean이 달린 메소드를 불러 생성해 넘겨준다.

3. @Autowired 사용

1) 필드 주입 (Field Injection) 필드에 **@Autowired**를 사용하여 의존성을 주입하는 방법

@Autowired
private MyService myService;

2) 생성자 주입 (Constructor Injection) 생성자에 **@Autowired**를 사용하여 의존성을 주입하는 방법

private MyService myService;

@Autowired
public MyController(MyService myService) {
    this.myService = myService;
}

3) 메서드 주입 (Method Injection) 메서드에 **@Autowired**를 사용하여 의존성을 주입하는 방법

private MyService myService;

@Autowired
public void setMyService(MyService myService) {
    this.myService = myService;
}

3. @Autowired 사용 시 주의 사항

**@Autowired**는 스프링 컨테이너에게 해당 타입의 빈이 여러 개인 경우에는 예외를 발생시키므로, 두 개 이상의 동일한 타입의 빈이 존재할 경우에는 빈의 이름이나 **@Qualifier**와 같은 다른 방법들을 사용하여 명시적으로 주입할 빈을 지정해야 한다.

또한, **@Autowired**는 스프링 4.3부터는 선택적으로 사용 가능한 어노테이션이 되었기 때문에, 필수적으로 의존성을 주입해야 하는 경우에는 **@Autowired(required = true)**로 설정할 수 있다.

반응형

'SpringBoot' 카테고리의 다른 글

SpringBoot - JPA 이해  (0) 2023.04.28
SpringBoot - @Slf4j 이해  (0) 2023.04.28
SpringBoot - @RequestMapping 활용  (0) 2023.04.28
SpringBoot - @Controller, @RestController 비교  (0) 2023.04.28
Spirngboot - @Repository 기능  (0) 2023.04.28