728x90
메이븐 의존 설정
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
- 메이븐은 한 개의 모듈을 아티팩트라는 단위로 관리
- spring-context라는 식별자를 가진 5.0.2 RELEASE 버전의 아티팩트에 대한 의존을 추가
- 의존 추가는 자바 어플리케이션에서 클래스패스에 spirng-context 모듈을 추가한다는 것 (jar 파일 추가)
메이븐 리포지토리
- 메이븐 로컬 리포지토리에서 [그룹 ID]\[아티팩트 ID]\[버전] 폴더에 아티팩트ID-버전.jar 형식의 이름을 갖는 파일이 있는지 검사
- 로컬 리포지토리에 파일이 없으면 메이븐 원격 중앙 리포지토리로부터 해당 파일을 다운로드하여 로컬 리포지토리에 복사한 후 사용
의존 전이(Transitive Dependencies)
- mvn compile 시, pom.xml에 지정한 maven jar 파일 외에 다양한 아티팩트 파일이 다운로드 됨
- 의존에서 설정한 아티팩트가 다시 의존하는 파일도 포함
- 의존하는 대상뿐만 아니라 의존 대상이 다시 의존하는 대상까지도 포함되는데 이를 의존 전의라고 함
기본 폴더 구조
src\\main\\java
- 메이븐에 정의되어 있는 기본 폴더 구조로, 자바 소스 코드가 위치
src\\main\\resources
- xml이나 properties 같이 자바 소스 이외의 다른 자원이 위치
src\\main\\webapp
- 웹 어플리케이션폴더로 JSP나 WEB-INF\web.xml 등 위치
코드
- AnnotationConfigApplicationContext 자바 설정에서 정보를 읽어와 빈 객체를 생성하고 관리
- AppContext에 정의한 @Bean 설정 정보를 읽어와 객체를 생성하고 초기화
- getBean() 은 자바 설정을 읽어와 생성한 빈(bean) 객체를 검색할 때 사용
- 첫 번째 파라미터는 메서드 이름인 빈 객체 이름
- 두 번째 파라미터는 검색할 빈 객체의 타입
스프링은 객체 컨테이너
- 스프링의 핵심 기능은 객체를 생성하고 초기화 하는 것
- 이와 관련된 기능은 ApplicationContext 라는 인터페이스에 정의
- AnotationConfigApplicationContext 클래스는 이 인터페이스를 알맞게 구현한 클래스 중 하나
- AnnotationConfigApplicationContext 클래스는 자바 클래스에서 정보를 읽어와 객체 생성과 초기화 수행
- 계층도 상에서 가장 상위에 BeanFactory 인터페이스 (객체 생성과 검색에 대한 기능 정의)가 위치
- 위에서 3번째에 ApplicationContext 인터페이스(메시지, 프로필/환경 변수 처리 기능 추가 정의)
- 가장 하단에 AnnotatcionConfigApplicationContext 구현 클래스가 위치
✅ 어떤 구현 클래스를 사용하든 각 구현 클래스는 설정 정보로부터 빈(Bean)이라고 불리는 객체를 생성하고 그 객체를 내부에 보관한다. 그리고 getBean() 메서드를 실행하면 해당하는 빈 객체를 제공한다.
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(AppContext.class);
Greeter g = ctx.getBean("greeter", Greeter.class);
- ApplicationContext(또는 BeanFactory)는 빈 객체의 생성, 초기화, 보관, 제거 등을 관리하고 있어서 컨테이너라고도 부름
- 스프링 컨테이너는 내부적으로 빈 객체와 빈 이름을 연결하는 정보를 가짐
싱글톤(Singleton)
- getBean() 메서드는 같은 객체를 리턴
- 별도 설정을 하지 않을 경우 스프링은 한 개의 빈 객체만을 생성하며, 이 때 빈 객체는 ‘싱글톤(singleton)’ 범위를 갖는다고 표현
- 싱글톤은 단일 객체를 의미하며, 스프링은 한 개의 @Bean 어노테이션에 대해 한 개의 빈 객체를 생성
'스프링' 카테고리의 다른 글
스프링5 프로그래밍 입문 - AOP 프로그래밍 (0) | 2023.10.28 |
---|---|
스프링5 프로그래밍 입문 - 빈 라이프사이클과 범위 (0) | 2023.10.02 |
스프링5 프로그래밍 입문 - 컴포넌트 스캔 (0) | 2023.10.02 |
스프링5 프로그래밍 입문 - 의존 자동 주입 (0) | 2023.10.02 |
스프링5 프로그래밍 입문 - 스프링 DI (0) | 2023.10.02 |