Spring boot

[기본] 스프링 컨테이너와 스프링 빈

메모

JUnit 5부턴 public 안해도 됨

iter 엔터: 이터레이터

soutm : 메소드명 찍어줌

soutv: 변수명 찍어줌

ctrl + D : 복사붙여넣기

alt + shift + 위아래 : 줄 이동

ctrl + E : 이전파일

ctrl + R : Replace같음

ctrl + shift + f10: (메소드 안에서) 해당 메소드 실행 ?? 

 

 

getBeanDefinition(beanDefinitionName) : 빈에 대한 정보(메타데이터)를 꺼낼 수 있음

beanDefinition.ROLE_APPLICATION: 스프링 내부에서 등록한 빈 말고 어플리케이션을 위해 개발자가 등록한 빈

 

스프링빈에 등록된 인스턴스 타입으로 결정됨

 

테스트에서는 출력물을 남겨두지 않는 것을 권장.

시스템 자체로 테스트할 수 있도록 작성

 

가끔 순수한 자바 애플리케이션에서 스프링 컨테이너를 생성해서 써야 할 때가 있다.

 

beanDefinition scope가 할당 안 되어 있으면 싱글톤임을 뜻함

 

getBeanDefinition은 ApplicationContext로 못 가져옴 그 하위 클래스로 받아야 함

 

자바 코드를 통해 빈에 등록하는 것은 FactoryMethod 를 사용함

외부에서 메소드를 호출해서 생성하는 방식

 


스프링 컨테이너 생성

new AnnotationConfigApplicationContext(Appconfig.class)에서 "AppConfig.class"부부분에서 스프링 컨테이너의 구성 정보를 지정할 수 있다.

스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록하고 의존관계를 주입(DI)한다.

빈은 항상 다른 이름을 등록하자

 


빈 조회

AnnotationConfigApplicationContext. ac;

ac.getBean("메소드 이름(키값으로 지정됨)", MemberService.class) // 메소드 이름(키값)과 클래스 타입으로 조회할 수 있다.

동일한 타입과 상위 클래스 타입으로 하위 빈을 호출할 수 있다.

 


BeanFactory와 ApplicationContext

BeanFactory 는 스프링 컨테이너의 최상위 인터페이스로 스프링 빈을 관리하고 조회한다. getBean() 포함한다.

ApplicationContext 는 BeanFactory와 함께 다양한 부가기능(메세지 국제화, 환경변수, 이벤트 등)을 함께 상속받아 제공한다.

AnnotationConfigApplicationContext(자바 코드) GenericXmlApplicationContext(xml) 등은 ApplicationContext를 상속받는 구현체이다.

 


Bean Definition

xml, 자바 코드 등을 읽어 BeanDefinition을 만든다.

BeanDifinition 에는 생성할 빈의 클래스 명, 싱글톤 여부, 팩토리 빈 이름 등의 정보가 저장된다.