https://m42-orion.tistory.com/100
@Autowired
는 Spring 프레임워크에서 제공하는 어노테이션으로, 자동 의존성 주입(Automatic Dependency Injection)을 제공합니다. 이 어노테이션은 주로 필드, 생성자, 메서드에 사용됩니다.
@Autowired
를 사용하면, Spring 컨테이너는 해당 타입의 빈을 찾아서 자동으로 주입합니다.@Autowired
private MyService myService;
@Autowired
를 사용하면, Spring 컨테이너는 생성자의 매개변수와 일치하는 타입의 빈을 찾아서 주입합니다. 이 방식은 필드 주입보다 권장되는 방식입니다. 왜냐하면 이 방식을 사용하면 클래스의 의존성이 명시적으로 드러나고, 테스트하기 더 쉽기 때문입니다.private final MyService myService;
@Autowired
public MyClass(MyService myService) {
this.myService = myService;
}
@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
는 주의해서 사용해야 합니다.