Hazel Han
Midnight In Coding
Hazel Han
전체 방문자
오늘
어제
  • 분류 전체보기 (46)
    • Back-end (6)
      • java (0)
      • spring frameworks (6)
      • spring boot (0)
    • Front-end (29)
      • React (7)
      • Javascript (0)
      • html (7)
      • css (15)
    • DB (0)
    • Algorithms (2)
    • 회고록 (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스프링프레임워크
  • 코딩
  • 리액트
  • 개발자
  • 남궁성
  • 저스트코드
  • coding
  • 기술블로그
  • 회고록
  • css
  • 프로그래밍
  • HTML
  • Spring
  • Java
  • 자바의정석
  • React
  • 자바
  • justcode
  • 스프링
  • springframeworks

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Hazel Han

Midnight In Coding

Back-end/spring frameworks

스프링 컨테이너와 빈

2023. 11. 19. 15:37

구현체가 여러개라면?

만약 OrderService 인터페이스에 대한 구현체가 하나라면, 일반적으로는 구현체의 이름을 OrderServiceImpl이라고 한다. 하지만, 구현체가 여러개라면 각 구현체의 특성에 맞게 이름을 생성한다.

 

 

@BeforeEach

: 테스트 코드 실행 전 반드시 실행되는 것으로, 테스트 코드가 2개면 2번 실행된다.

class MemberServiceTest {

 MemberService memberService;
 
 @BeforeEach
 public void beforeEach() {
 AppConfig appConfig = new AppConfig();
 memberService = appConfig.memberService();
 
 }
}

 

스프링 컨테이너와 빈

스프링 컨테이너

ApplicationContext를 스프링 컨테이너라고 하며, 이것은 인터페이스이다.

스프링 컨테이너 안에 빈 저장소가 있고, 빈 정보를 가져다 사용할 수 있다.

 

스프링 빈

Spring IoC 컨테이너가 관리하는 자바 객체로서 컨테이너에 의해 생명주기가 관리되는 객체를 의미한다.

 

스프링 빈 조회 방법

class ApplicationContextInfoTest {

 AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(AppConfig.class);

 @Test
 @DisplayName("모든 빈 출력하기")
 void findAllBean() {
 String[] beanDefinitionNames = ac.getBeanDefinitionNames();
 for (String beanDefinitionName : beanDefinitionNames) {
 Object bean = ac.getBean(beanDefinitionName);
 System.out.println("name=" + beanDefinitionName + " object=" +
bean);

 }

 

스프링에 등록된 모든 빈 조회하기

ac.getBean(빈이름, 타입);

조회대상 스프링 빈이 존재하지 않으면, 아래와 같은 에러가 발생한다.

NoSuchBeanDefinitionException: No bean named 'xxxxx' available

 

타입으로 빈 조회하기

ac.getBeansOfType();

위 코드를 사용하면 타입으로 빈을 조회할 수 있는데, 이 때 같은 타입의 빈이 두 개 이상 존재하면 에러가 발생한다.

해결방안 : 각 빈마다 이름을 지정하자.

 

빈 상속

Object 타입으로 빈을 조회하면, 모든 빈을 조회할 수 있다.

class ApplicationContextExtendsFindTest {

 AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(TestConfig.class);

@Test
 @DisplayName("부모 타입으로 모두 조회하기 - Object")
 void findAllBeanByObjectType() {
 Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
 for (String key : beansOfType.keySet()) {
 System.out.println("key = " + key + " value=" +
beansOfType.get(key));

 }
}
저작자표시 (새창열림)

'Back-end > spring frameworks' 카테고리의 다른 글

컴포넌트 스캔  (0) 2023.11.19
싱글톤  (0) 2023.11.19
좋은 객체 지향 설계의 5가지 원칙(SOLID)  (0) 2023.11.19
스프링 웹개발 방법(컨트롤러의 view 호출 방법)  (0) 2023.09.26
@AfterEach, 어노테이션, MVC패턴의 호출 경로  (0) 2023.09.26
    'Back-end/spring frameworks' 카테고리의 다른 글
    • 컴포넌트 스캔
    • 싱글톤
    • 좋은 객체 지향 설계의 5가지 원칙(SOLID)
    • 스프링 웹개발 방법(컨트롤러의 view 호출 방법)
    Hazel Han
    Hazel Han

    티스토리툴바