2021.08.18 TIL

새롭게 배운 것 Done

운동

독서

알고리즘

코딩

@Autowired

@Autowired 적용 대상에 일치하는 빈이 없으면?

  • UnsatisfiedDependecyException -> NoSuchBeanDefinitionException: No qualifying bean of type ~ available: expected at least 1 bean which qualifies autowire candidate

@Autowired 붙인 주입 대상에 일치하는 빈이 두 개 이상이면?

  • UnsatisfiedDependecyException -> NoUniqueBeanDefinitionException: No qualifying bean of type ~ available: expected single matching bean but found 2
  • @Qualifier 없으면 빈의 이름을 한정자로 지정
    • 자동 주입할 빈을 지정하기
  • @Primary: 하나만 고르는것 -> 주로 많이 씀, 사용하는 곳에서 생각하지 않도록 하려고

@Autowired 붙인 타입에 해당하는 빈이 존재하지 않으면 익셉션 발생

  • required 속성 T/F로 관리
    • false: 일치하는 빈이 없으면 값 할당 자체를 하지 않음
  • Optional 사용
  • @Nullable 사용
    • 자동 주입할 빈이 존재하지 않아도 메서드가 호출됨
    • 의존 주입 대상이 존재하지 않으면 null을 값으로 전달

Component Scan

Bean Life Cycle


//1. 컨테이너 초기화 -> 빈 객체의 생성, 의존 주입, 초기화
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppContext.class);

//2. 컨테이너에서 빈 객체를 구해서 사용
OrderService orderService = context.getBean("orderService", OrderService.class);
String message = orderServcie.print("주문");
System.out.println(message);

//3. 컨테이너 종료 -> 빈 객체의 소멸
context.close();

public interface InitializingBean {
  void afterPropertiesSet() throws Exception;
}

public interface DisposableBean {
  void destroy() throws Exception;
}

@Scope("prototype")으로 싱글톤 범위 객체가 아니라 프로토타입 범위의 빈 설정할 수 있음 -> 매번 새로운 객체 생성 => 소멸 처리도 코드에서 직접 해야 함

참고: 책 - 스프링5 프로그래밍 입문 - 최범균



깨달은 점 FEELING