ㅅㅇ

[Spring Boot] 스프링 컨테이너, Bean 등록 및 사용하기 본문

SW_STUDY/SpringBoot

[Spring Boot] 스프링 컨테이너, Bean 등록 및 사용하기

SO__OS 2023. 3. 8. 19:56

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