Replies: 1 comment 1 reply
|
지은님 사진이 깨져서 안보이는거같은데 저만,, 안보이나요,, ?!? |
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Spring Container 생성
스프링 컨테이너가 생성되는 과정을 알아보자
ApplicationContext를 스프링 컨테이너라 한다.
ApplicationContext 는 인터페이스다. (다형성이 적용됨)
스프링 컨테이너는 XML기반으로 만들 수 있고 Annotation 기반의 자바 설정 클래스로 만들 수 있다.(요즘엔 Annotation기반으로 많이 사용)
직전에 AppConfig를 사용했던 방식이 Annotation기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.
자바 설정 클래스를 기반으로 스프링 컨테이너(ApplicatoinContext)를 만들어보자
new AnnotationConfigApplicationContext(AppConfig.class);( 파라미터를 AppConfig.class로)**스프링 컨테이너를 부를 때
BeanFactory,ApplicationContext로 구분해서 이야기한다.뒤에서 설명하고
BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적으로ApplicationContext를 스프링 컨테이너라 한다.스프링 컨테이너의 생성 과정
스프링 빈 저장소에 빈 이름과 빈 객체를 저장
주의: “빈 이름은 항상 다른 이름을 부여” 해야 한다. 같은 이름을 부여하면 다른 빈이 무시되거나 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.
동적인 의존 관계를 스프링이 설정해준다.
실제 스프링빈이 연결이 된다.
스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)한다.
스프링 빈을 생성하고 의존 관계를 주입하는 단계가 나눠져 있다.
그런데 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한꺼번에 처리된다. 여기서는 개념적으로 이해하기 쉽게 나눠서 설명했다.
정리
코드
정리
스프링 컨테이너를 생성하고, 설정(구성) 정보를 참고해서 스프링 빈도 등록하고 의존관계도 설정했다.이제 스프링 컨테이너에서 데이터를 조회해본다
컨테이너에 등록된 모든 빈 조회
결과를 좀 다르게 하기 위해서 , 를 넣었다.
결과

결과

ac.getBeanDefinitionNames(): 스프링에 등록된 모든 빈 이름을 조회한다.ac.getBean(): 빈 이름으로 빈 객체(인스턴스)를 조회한다.ROLE_APPLICATION: 일반적으로 사용자가 정의한 빈ROLE_INFRASTRUCTURE: 스프링이 내부에서 사용하는 빈스프링 빈 조회 : 기본
스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법
-
ac.getBean(빈이름, 타입)-
ac.getBean(타입)NoSuchBeanDefinitionException: No bean named 'xxxxx' available예외 성공 처리로 바꿔주기
스프링 빈 조회 : 동일한 타입이 둘 이상
ac.getBeansOfType()을 사용하면 해당 타입의 모든 빈을 조회할 수 있다.Ctrl + Alt + V: Extract / Introduce스프링 빈 조회 : 상속관계
BeanFactory와 ApplicationContext
BeanFactory
getBean()을 제공한다.ApplicationContext
공통기능 : ApplicationContext

정리
다양한 설정 형식 지원 - 자바 코드, XML
애노테이션 기반 자바 코드 설정 사용
new AnnotationConfigApplicationContext(AppConfig.class)AnnotationConfigApplicationContext클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다.XML 설정 사용
test
resources > appConfig.xml
할인 정책까지 마저 쓰면,
AppConfig.java설정 정보를비교해보면 거의 비슷하다는 것을 알 수 있다.-
https://spring.io/projects/spring-framework
스프링 빈 설정 메타 정보 : BeanDefinition
스프링은 어떻게 이런 다양한 설정 형식을 지원하는 것일까 ? 그 중심에는
BeanDefinition이라는 추상화가 있다.쉽게 얘기해 "역할과 구현을 개념적으로 나눈 것"이다.
BeanDefiniton을 빈 설정 메타정보라 한다.
@Bean,<bean>당 각 하나씩 메타정보가 생성된다.스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.

코드 레벨로 넘어가면,
BeanDefinition 정보
정리
이거는 getBeanDefinition이 없다.
최종 정리
단축키
All reactions