Java Spring boot @Autowired

BackEnd_Ash.log·2023년 7월 26일
0

자바스터디

목록 보기
16/19

https://m42-orion.tistory.com/100

@Autowired는 Spring 프레임워크에서 제공하는 어노테이션으로, 자동 의존성 주입(Automatic Dependency Injection)을 제공합니다. 이 어노테이션은 주로 필드, 생성자, 메서드에 사용됩니다.

  1. 필드 주입: 클래스의 필드 위에 @Autowired를 사용하면, Spring 컨테이너는 해당 타입의 빈을 찾아서 자동으로 주입합니다.
@Autowired
private MyService myService;
  1. 생성자 주입: 클래스의 생성자 위에 @Autowired를 사용하면, Spring 컨테이너는 생성자의 매개변수와 일치하는 타입의 빈을 찾아서 주입합니다. 이 방식은 필드 주입보다 권장되는 방식입니다. 왜냐하면 이 방식을 사용하면 클래스의 의존성이 명시적으로 드러나고, 테스트하기 더 쉽기 때문입니다.
private final MyService myService;

@Autowired
public MyClass(MyService myService) {
    this.myService = myService;
}
  1. 메서드 주입: 메서드 위에 @Autowired를 사용하면, Spring 컨테이너는 메서드의 매개변수와 일치하는 타입의 빈을 찾아서 주입합니다. 이 방식은 주로 한 클래스에서 여러 의존성을 주입할 때 사용됩니다.
private MyService myService;
private MyRepository myRepository;

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

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

Spring 4.3부터는 @Autowired를 생성자에 사용하는 것이 선택사항이 되었습니다.
따라서 한 개의 생성자만 있는 경우에는 @Autowired를 생략할 수 있습니다.
이 방법을 사용하면 코드가 더 깔끔해집니다.
하지만 이 방식은 Spring 프레임워크에 의존적인 방식이므로, 순수한 Java 코드를 유지하려는 경우에는 @Autowired를 사용하는 것이 좋습니다.

모든 경우에 Spring 컨테이너는 @Autowired 어노테이션이 붙은 필드, 생성자, 메서드의 타입을 보고 해당 타입의 빈을 찾아서 주입합니다.
만약 해당 타입의 빈을 찾을 수 없다면, Spring은 예외를 발생시킵니다. 이 때문에 @Autowired는 주의해서 사용해야 합니다.

profile
꾸준함이란 ... ?

0개의 댓글