@Autowired

itonse·2023년 11월 13일
0

Spring

목록 보기
2/8

@Autowired 란?

  • 스프링의 기본 어노테이션 중 하나로, 자동 의존성 주입을 제공합니다.
  • 필요한 빈(bean)을 자동으로 주입합니다.
  • 필드, 생성자, setter 메서드에 적용할 수 있습니다.



[코드 예시]

다음은 UserService가 UserRepository에 의존하고 있는 경우입니다.

1. 필드 주입

  • 이 방법은 간결하지만, 클래스가 외부에서 변경될 수 없으므로, 테스트가 어려울 수 있습니다.
  • 필드 주입은 순환참조를 막을 수 없으며, final 키워드를 붙일 수 없어 변경 시 사이드이펙트가 발생할 수 있어 권장되지 않는 방법입니다.
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    // 사용자 관련 비즈니스 로직...
}

2. 생성자 주입

  • 가장 권장되는 방식입니다.
  • 클래스의 생성자에 @Autowired를 선언하는 방법으로, 스프링 4.3 이후로는 생성자가 하나만 있을 경우 어노테이션 생략이 가능합니다.
@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired  // 생략 가능
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 사용자 관련 비즈니스 로직...
}

3. setter 주입

  • 세터 메서드에 @Autowired를 선언하는 방법입니다.
  • 선택적 의존성이 필요한 경우에 유용합니다.
@Service
public class UserService {
    private final UserRepository userRepository;   // 필수 의존성
    private NotificationService notificationService; // 선택적 의존성

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // NotificationService는 필수적인 의존성이 아니므로 세터를 통해 주입
    @Autowired
    public void setNotificationService(NotificationService notificationService) {
        this.notificationService = notificationService;
    }

    // 사용자 관련 비즈니스 로직...
}

0개의 댓글

관련 채용 정보