
Spring의존성 주입 @AutowiredCS지식 및 수업 정리/spring2024. 7. 31. 16:18
Table of Contents
필드를 통해 의존성 주입하는 예시를 통한 이해
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void saveUser(String username) {
userRepository.save(username);
}
}
의존성:
의존성은 어떤 클래스가 다른 클래스의 기능을 필요로 할 때 발생한다. 여기서 UserService 클래스는 UserRepository 클래스에 의존한다. 즉, UserService는 UserRepository의 기능을 사용해야 한다.
의존성 주입:
- 의존성 주입은 외부에서 객체의 의존성을 제공하는 설계 패턴이다. 이를 통해 객체 간의 결합도를 낮추고 코드의 유연성과 재사용성을 높임.
코드에서의 의존성 주입
- UserService 클래스는 UserRepository 클래스에 대한 의존성을 가지고 있다.
- @Autowired 애너테이션을 사용하여 스프링 프레임워크가 UserRepository의 인스턴스를 UserService에 자동으로 주입.
의존성 주입의 구체적 과정
- UserService 클래스의 정의:
- UserService 클래스는 UserRepository 객체를 필요. 이는 userRepository 필드로 표현됨.
- @Autowired 애너테이션:
- @Autowired 어노테이션은 스프링 컨테이너에게 userRepository 필드에 UserRepository 타입의 빈을 주입하라고 지시.
- 스프링 컨테이너 초기화:
- 애플리케이션이 시작될 때 스프링 컨테이너가 초기화되고, 설정된 빈들을 생성하고 관리.
- 빈 생성 및 주입:
- 스프링 컨테이너는 UserService 빈을 생성할 때, UserRepository 빈을 찾아 userRepository 필드에 주입한다.
- 이 과정에서 스프링은 UserRepository 타입의 빈을 검색하여 주입.
필드 의존성 주입 예시 결론
- 의존성 주입의 주체: 스프링 컨테이너가 @Autowired 애너테이션을 해석하여 UserRepository 빈을 찾아 UserService에 주입하는 것!
- 주입된 의존성 사용: UserService 클래스는 주입된 UserRepository 객체를 사용하여 saveUser 메서드를 통해 사용자 정보를 저장한다.
따라서, UserService 클래스는 UserRepository 클래스에 의존하고 있으며 이 의존성은 스프링 프레임워크에 의해 자동으로 주입.
수정자 주입 방식
@Service
public class UserService {
private UserRepository userRepository;
// 수정자 주입 방식
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void saveUser(String username) {
userRepository.save(username);
}
}
setter 함수를 생성하고 그 위에 @Autowired를 적음. 스프링 빈을 모두 등록한 후 @Autowired가 붙은 수정자를 찾아 의존관계를 주입하게 된다.
의존성을 선택적으로 주입 가능해 유연하다.
생성자 주입 방식
@Service
public class UserService {
private final UserRepository userRepository;
// 생성자 주입 방식
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void saveUser(String username) {
userRepository.save(username);
}
}
생성자 주입 방식에서는 @Autowired 애너테이션을 생성자에 사용할 수 잇으며 생성자가 하나뿐일 경우에는 어노테이션 생략 가능하다.
'CS지식 및 수업 정리 > spring' 카테고리의 다른 글
김영한 spring 강의 3 (0) | 2024.05.03 |
---|---|
김영한 Spring 기본편 강의 2 정리 (0) | 2024.04.12 |

@바이솔 :: Byesol의 기록