스프링 빈

이정연·2023년 2월 10일
0

spring

목록 보기
2/5

Bean

  • 스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트
  • 스프링컨테이너에 등록된 객체
  • @Bean이 적힌 메서드를 모두 호출해서 반환된 객체를 스프링컨테이너에 등록함

BeanDefinition

  • bean은 BeanDefinition에 따라서 활용법이 달라지게됨

  • 이 속성에 따라서 컨테이너가 bean을 어떻게 관리할 지 결정한다.

  • 약간 관리 참조표라고 생각하면 편하겠다

    세탁물 관리시 이 옷은 반드시 드라이를 해야한다면 그렇게해야함 <<이런느낌

  • BeanDefinition가 포함하고 있는 메타데이터라 하면 bean에 대한 구성 설정을 말함

  • BeanDefinition은 일종의 레시피라고 할 수 있다.

빈스코프

  • bean을 여러 범위 중 하나에 배치되도록 정의할 수 있다.
  • 사용자 정의 범위를 생성 할 수 있다.
  • Spring Framework는 6개의 범위를 지원하며, 그 중 4개는 ApplicationContext를 사용하는 경우에만 사용할 수 있습니다.

스스로 공부해 볼 스코프

  • prototype
  • requset
  • session
  • application
  • websocket

싱글톤 스코프

  • 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴
  • 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때가지 유지된다.
  • 싱글톤 빈의 하나의 공유 인스턴스만 관리하게 된다. 따라서 private 생성자를 사용해 외부에서 임의로 new를 사용하지 못하도록 막는것이 중요
  • 스프링컨테이너 종료 시 소멸 메서드도 자동으로 실행된다.
  • 단일 인스턴스는 싱글톤의 빈 캐시에 저장된다.
  • 싱글톤 스코프의 스프링 빈은 여러번 호출해도 모두 같은 인스턴스 참조 주소값을 가진다.
@Configuration
public class DependencyConfig {
  @Bean
  public MemberService memberService() {
    return new MemberService(memberRepository());
  }
  @Bean
  public MemberRepository memberRepository() {
    return new MemberRepository();
  }
  @Bean
  public CoffeeService coffeeService() {
    return new CoffeeService(coffeeRepository());
  }
  @Bean
  public CoffeeRepository coffeeRepository() {
    return new CoffeeRepository();
  }
}

bean을 통해 컨테이너에 등록합니다.

public calss SingletonTest{
	static AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(DependencyConfig.class);
    
    static MemberService memberService1 = ac.getBean("memberService, MemberService.class);
    static MemberService memberService2 = ac.getBean("memberService, MemberService.class);
    
    public static void main(String[] args){
    System.out.printIn("memberService1 : " + memberService1);
    System.out.printIn("memberService2 : " + memberService2);
    }
}

결과값
memberService1 : com.codestates.section2week4.member.MemberService@1a245833
memberService2 : com.codestates.section2week4.member.MemberService@1a245833

같은 MemberService를 불러도 같은 주소값을 가진 싱글톤이 형성된다.

  • 특정 클라이언트가 값을 변경할 수 있으면 안됨.
  • 읽기만 가능해야 함
  • 스프링 빈의 공유 값을 설정하면 장애가 발생 할 수 밖에 없음
profile
반갑습니다.

0개의 댓글