자바/스프링, 스프링부트
컨테이너, DI
seein2
2024. 11. 28. 14:28
스프링 컨테이너
- 컨테이너는 애플리케이션에서 사용되는 Java 객체들(빈)의 생명주기를 관리하고, 생성된 빈들에게 추가적인 기능을 제공한다.
1. BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 빈의 생성과 의존관계 설정을 담당
- 필요한 시점까지 빈의 생성을 지연시키는 지연 로딩 방식 사용
2. ApplicationContext
- BeanFactory를 확장한 컨테이너
- 더 많은 기능 제공:
- 국제화 지원
- 리소스 로딩 기능
- 이벤트 발행 기능
- 애플리케이션 레이어 컨텍스트 지원
의존성 주입(DI)
- 의존성 주입은 객체가 필요로 하는 다른 객체(의존성)를 직접 생성하지 않고, 외부에서 주입받는 방식. 이를 통해 객체 간의 결합도를 낮출 수 있다.
1. DI의 장점
- 코드의 재사용성 증가
- 객체 간의 결합도 감소
- 테스트 용이성 향상
- 유지보수성 개선
2. 의존성 주입의 방법
2.1생성자 주입
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
2.2 필드 주입
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
}
2.3 수정자(Setter) 주입
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
3. 스프링 빈 등록 방법
3.1 컴포넌트 스캔을 통한 자동 등록
@Component // @Controller, @Service, @Repository 등
public class UserService {
// ...
}
3.2 Java Config를 통한 수동 등록
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}