Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

프로그래밍 끄적끄적

[SpringBoot] 스프링 빈 본문

백엔드/스프링

[SpringBoot] 스프링 빈

soeunkk 2021. 9. 1. 17:45

🌳 스프링 빈이란?

빈(Bean)은 스프링 IoC 컨테이너가 관리하는 자바 객체를 말한다.

IoC 컨테이너에 의해 인스턴스화, 관리, 생성되며 보통 싱글톤으로 존재한다.

 

🌳 스프링 빈 이름 정의

스프링 빈 이름은 대체로 메서드 이름을 사용하며 @Bean(name="[빈 이름]")으로 직접 명시해 줄 수도 있다.

이때 주의할 점은 동일한 빈 이름이 있어서는 안 된다는 것이다.

 

🌳 스프링 빈 출력하기

[ApplicationContext].getBeanDefinitionNames(): 스프링에 등록된 모든 빈 이름을 조회

[ApplicationContext].getBean([빈 이름], [빈 타입]): 빈 이름과 타입으로 빈 객체를 조회

    ▪ 구현체 타입으로 조회해도 되지만, 구현에 의존하는 것은 좋지 않음

[ApplicationContext].getBean([빈 이름]): 빈 이름으로 빈 객체를 조회

[ApplicationContext].getBean([빈 타입]): 빈 타입으로 빈 객체를 조회

[ApplicationContext].getBeansOfType([빈 타입]): 빈 타임으로 빈 객체들을 조회 

    ▪ Map<[빈 이름], [빈 객체]> 로 반환

[BeanDefinition].getRole()

    ▪ BeanDefinition.ROLE_APPLICATION: 일반적으로 사용자가 정의한 빈

    ▪ BeanDefinition.ROLE_INFRASTRUCTURE: 스프링이 내부에서 사용하는 빈

 

🍃 예외 처리

NoSuchBeanDefinitionException: 조회된 빈이 0개일 때 발생

NoUniqueBeanDefinitionException: 조회된 빈이 2개 이상일 때 발생

 

🌳 스프링 빈 상속 관계

부모 타입으로 조회 시, 자식 타입도 함께 조회된다.

ex) 모든 빈 클래스는 Object 클래스를 상속하고 있으므로 getBean(Object.class) 로 조회하면 모든 스프링 빈이 조회됨

 


🌟 Test 코드에서 Exception 검증

Assertions.assertThrows([Exception 타입], [람다식]);

ex) Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxx"));

 

Comments