Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Operating System
- generics
- JVM
- Compiler
- SRP
- 42서울
- 참조변수
- 도커네트워크
- StackArea
- 포함관계
- la-piscine
- 바이트코드
- classloader
- RDD
- JIT
- 라피신
- HeapArea
- 자바컴파일러
- MethodArea
- java
- 제네릭스
- javac
- pg_hba.conf
- 운영체제
- 42seoul
- abstract
- jdk
- 이노베이션아카데미
- LSP
- 상속관계
Archives
- Today
- Total
while(1) 작심삼일();
AppConfig와 스프링 컨테이너 본문
직전 포스트에서는 순수한 JAVA 코드만으로 DI(의존관계 주입)을 해보았고, 이번에는 스프링 컨테이너를 통해서 사용해본다.
@Configuration
public class AppConfig {
@Bean
public OrderService orderService() {
return new OrderServiceImpl(new FixDiscountPolicy());
}
}
main에서의 차이점
기존)
AppConfig appConfig = new AppConfig();
OrderService orderService = appConfig.orderService();
변경)
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);
스프링 컨테이너
- ApplicationContext를 스프링 컨테이너라고 한다. (인터페이스)
- @Configuration이 붙은 AppConfig를 설정정보로 사용한다. @Bean이라고 적힌 메서드를 전부 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 등록된 객체를 스프링 빈이라고 한다.
- 스프링 빈은 @Bean이 붙은 메서드 명을 스프링 빈의 이름으로 사용한다. 빈 이름은 항상 다른 이름을 부여해야한다. 같다면 다른 빈이 무시 혹은 기존 빈을 덮는 등과 같은 오류가 발생한다. (@Bean(name = "name")으로 변경도 가능하다.)
- 직접 자바코드를 통해 등록했을 때는 직접 객체를 조회해서 사용했지만, 이제부터는 스프링 컨테이너를 통해 사용할 스프링 빈(객체)를 찾아야한다. 스프링 빈은 applicationContext.getBean() 메서드를 이용하여 찾을 수 있다.
- XML, 애노테이션 기반의 자바 설정 클래스로 만들 수 있고, 직전에 AppConfig를 사용한 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.
- 생성할 때 구성정보를 지정해주어야 한다. (ex. new AnnotationConfigApplicationContext(AppConfig.class))
ac.getBeanDefinitionNames() : 스프링 컨테이너에 등록된 모든 빈 이름을 조회한다.
ac.getBean("name") : 빈 이름으로 빈 객체(인스턴스)를 조회한다.
ac.getBeansOfType() : 해당 타입의 모든 빈을 조회한다.
스프링이 내부에서 사용하는 빈은 getRole()로 구분할 수 있다.
ROLE_APPLICATION : 사용자가 정의한 빈
ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스이다.
- 스프링 빈을 관리하고 조회하는 역할을 하며 관련 대부분의 기능을 제공한다.
ApplicationContext
- BeanFactory 기능을 모두 상속받아서 제공한다.
- 메시지소스를 활용한 국제화 기능 (ex. 한국 -> 한글, 영어권 -> 영어로 출력)
- 환경변수 (로컬, 개발, 운영 등을 구분하여 처리)
- 애플리케이션 이벤트 (이벤트를 발생하고 구독하는 모델을 편리하게 지원)
- 편리한 리소스 조회 (파일, 클래스패스, 외부 등에서 리소스를 편리하게 지원)
BeanFactory를 직접 사용하는 경우보다는 부가기능이 포함된 ApplicationContext를 사용한다.
※ 스프링 핵심 원리 - 기본편(김영한)을 수강하고 정리한 글입니다. inf.run/2oxX
스프링 핵심 원리 - 기본편 - 인프런
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온
www.inflearn.com
'CS > spring' 카테고리의 다른 글
컴포넌트 스캔 (0) | 2021.01.29 |
---|---|
싱글톤 패턴 (0) | 2021.01.29 |
AppConfig, IoC, DI (0) | 2021.01.28 |
스프링 시작하기 - 환경설정 (0) | 2021.01.28 |
좋은 객체 지향 프로그래밍이란? (0) | 2021.01.28 |
Comments