1. 스프링 컨테이너 ApplicationContext
1. ApplicationConext
- 스프링 컨테이너
- BeanFactory 인터페이스의 하위 인터페이스. BeanFactory에서 부가기능(환경 변수 관련 처리, 애플리케이션 이벤트, 리소스 조회, 국제화 기능)을 추가한 것.
2. BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- 스프링 빈을 관리하고 조회하는 역할.
- BeanFactory, ApplicationContext를 구분해서 말하지만, AppicationContext 가 BeanFactory 의 모든 기능을 가지고 있기 때문에 BeanFactory를 직접적으로 사용하는 경우는 거의 없다.
3. 스프링 컨테이너의 특징 - 싱글톤 컨테이너
- 기본적으로 빈을 싱글톤으로 관리.
- bean 생성 시, 별다른 설정이 없다면, default 로 싱글톤이 적용됨.
- 스프링은 컨테이너를 통해 직접 싱글톤 객체를 생성하고 관리하는데, 요청이 들어올 때마다 매번 객체를 생성하지 않고 이미 만들어진 객체를 공유하기 때문에 효율적인 사용이 가능하다.
- 장점
- 싱글톤 패턴의 문제를 없앰.
- 싱글톤 코드 문제 (static 메소드, private 생성자 사용하지 않아, 객체 지향적 개발을 할 수 있음.)
- 구체 클래스에 의존, 유연성이 떨어짐 등
- 매번 인스턴스를 생성할 필요 없이 단 하나만을 생성하여 비용을 줄임.
- 테스트 하기 편함.
2. Bean 등록
1. @configuration, @bean 방식
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}
2. @component 방식
- @service, @controller, @repository 어노테이션은 @component안에 모두 속해있다.
- 따라서 Bean 으로 등록할 객체에 이 세 개 중 한 어노테이션를 붙이면 Bean으로 등록이 된다.
@Component
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}