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();
    }
}