해당 포스트는 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문 [최범균 저] 책 내용을 참고하였습니다.
C:\spring5fs\sp5-chap02\ : 프로젝트 폴더
C:\spring5fs\sp5-chap02\src\main\java : 자바 소스 폴더
프로젝트의 설정 정보를 관리하는 프로그램으로
프로젝트에서 필요로 하는 의존 모듈이나 플러그인 등에 대한 설정을 담는다.
메이븐은 .xml 확장자로 관리하고, 그레이들은 .gradle 확장자의 파일로 관리한다.
<!--pom.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sp5</groupId>
<artifactId>sp5-chap02</artifactId> <!-- 프로젝트 식별자 -->
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency> <!-- 5.0.2 RELEASE 버전의 spring-context 모듈을 사용한다고 설정 -->
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin> <!-- 자바 1.8버전을 기준으로 컴파일하고 결과 클래스를 생성-->
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
위 코드는 spring-context라는 식별자를 가진 5.0.2 RELEASE 버전의 아티팩트에 대한 의존을 추가한 것이다.
각 아티팩트의 완전한 이름은 '아티팩트이름-버전.jar' 이므로 'spring-context-5.0.2 RELEASE.jar' 파일이 클래스 패스에 추가될 것이다.
xml 파일을 작성한 상태에서는 아직 'spring-context-5.0.2 RELEASE.jar' 파일은 다운로드 되지 않았다.
메이븐 로컬 리포지토리에서 '[그룹ID]/[아티팩트ID]/[버전]/아티팩트ID-버전.jar' 형식의 파일이 있는지 확인하고 존재하면 사용한다. 없으면 메이븐 원격 중앙 리포지토리에서 해당 파일을 다운로드하고 사용한다.
위 과정은 컴파일될 때 실행한다.
cmd 창에서 프로젝트 폴더로 이동한 후, mvn compile 명령어를 실행하면 컴파일 된다.
이클립스로 실행한다면 maven project로 import 하면 아래와 같이 자동으로 다운로드 한다.
그레이들 프로젝트를 생성한다면 메이븐과 폴더 구조는 동일하다. 다른 점은 pom.xml 대신 build.gradle 파일을 작성해서 설정 정보로 사용한다는 것이다.
위에 컴파일할 때, 다양한 아티팩트 파일을 다운로드한다.
컴파일을 수행하는데 필요한 메이븐 컴파일러 글러그인과 같은 메이븐과 관련된 파일 뿐만 아니라 의존(<dependency>)에서 설정한 아티팩트가 다시 의존하는 파일도 모두 다운로드 받는다.
이렇게 의존대상이 다시 의존하는 대상까지 모두 의존 대상에 포함하는 것을 의존 전이(Transitive Dependencies)라고 한다.
ApplicationContext 인터페이스에는 스프링의 핵심 기능인 객체를 생성하고 초기화 하는 기능이 들어있다.
AnnotationConfigApplicationContext 클래스는 이 인터페이스를 알맞게 구현한 클래스 중 하나이다.
즉, AnnotationConfigApplicationContext 클래스는 자바 클래스에서 정보를 읽어와 객체 생성과 초기화를 수행한다.
최상위에 있는 BeanFactory 인터페이스는 객체 생성과 검색에 대한 기능을 정의한다.
getBean() 메서드가 BeanFactory에 정의되어 있다.
싱글톤 빈인지 프로토타입 빈인지 확인하는 기능도 제공한다.
최하단에 있는 세 클래스는 BeanFactory와 ApplicatoinContext에 정의된 기능의 구현을 제공한다.
각 차이점은 순서대로 자바 애노테이션, XML, 그루비 코드로 부터 객체 설정 정보를 가져온다는 것이다.
설정 정보로부터 각 구현 클래스는 빈(Bean)이라고 불리는 객체로 생성되고 관리된다.
// 1. 설정 정보를 이용해 빈 객체를 생성
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class);
// 2. 빈 객체를 제공
Greter g = ctx.getBean("greeter", Greeter.class);
ApplicationContext또는 BeanFactory는 Bean 객체의 생성, 초기화, 보관, 제거 등을 관리하고 있어서 스프링 컨테이너라고 부른다.
별도의 설정이 없다면 스프링은 한 개의 빈 객체만을 생성하며 싱글톤 범위를 갖는다.
한마디로 빈 객체를 생성할 때 싱글톤 객체로 생성한다.
Spring 1
EDITOR: OJO
[스프링1] 4장. 의존 자동 주입 (0) | 2022.11.05 |
---|---|
[스프링 1] 3장.스프링 DI (0) | 2022.10.27 |
[스프링1] 빈 생명주기 콜백, 빈 스코프 (0) | 2022.10.21 |
[스프링1] 컴포넌트 스캔, 의존관계 자동 주입 (0) | 2022.10.13 |
[스프링 1] AppConfig, 스프링 컨테이너, 싱글톤 (0) | 2022.10.06 |