스프링을 이용한 자바 프로젝트 진행 과정은 아래와 같다.
pom.xml
파일이 프로젝트 root에 위치src/main/java
src/test/java
target
pom.xml
pom.xml
은 메이븐 프로젝트에 대한 설정 정보를 관리하는 파일<!-- pom.xml -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
아티팩트
단위로 관리원격 레포지토리
와 로컬 레포지토리
를 이용메이븐은 로컬 레포지토리
에서 [그룹ID][아티팩트ID][버전] 폴더에 아티팩트ID-버전.jar 형식의 이름을 갖는 파일이 있는지 검사메이븐은 원격 중앙 레포지토리
로부터 해당 파일을 다운로드하여 로컬 레포지토리에 복사한 뒤 그 파일을 사용다시 의존하는
파일도 포함하여 다운로드지우고
원격 레포지토리에서 다운로드하는 것을 권장//AppContext.java
@Configuration
public class AppContext {
@Bean
public Greeter greeter() {
...
}
}
@configuration
어노테이션은 해당 클래스를 스프링 설정 클래스
로 지정@Bean
어노테이션을 매서드에 붙이면 해당 매서드가 생성한 객체를 스프링이 관리하는 Bean 객체로 등록
@Bean
어노테이션을 붙인 매서드의 이름
은 Bean 객체를 구분할 때 사용 (위의 예시에서는 greeter를 사용하게 됨)@Configuration 어노테이션 말고,
XML 파일
로도 설정파일을 생성 가능
@Configuration 어노테이션은 변경사항이 생길 시,매번
컴파일 해야하지만 XML로 설정한 파일은몇 글자
를 고치기만 하면 됨
자세한 사항은 링크 참조: https://bit.ly/2MGXG1J
//Main.java
public class Main {
public static void main(String[] args) {
// 1. 설정 정보를 이용해 Bean 객체를 생성
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(AppContext.class);
// 2. Bean 객체를 제공
Greeter g = ctx.getBean("greeter", Greeter.class);
...
ctx.close();
}
}
AnnotationConfigApplicationContext
클래스는 스프링의 핵심인 객체 생성 및 초기화를 담당, 자바 클래스의 정보를 읽어옴AnnotationConfigApplicationContext
의 상위 클래스 ApplicationContext
또는 BeanFactory
는 Bean 객체의 생성, 초기화, 보관, 관리 등을 담당하고 있어 컨테이너(Container)
라고도 부름컨테이너는 보통 인스턴스의
생명주기를 관리
하며, 생성된 인스턴스들에게추가적인 기능
을 제공하도록하는 것
스프링 컨테이너의 두 종류:빈팩토리(BeanFactory)
,어플리케이션 컨텍스트(ApplicationContext)
BeanFactory
: DI의 기본사항을 제공하는 가장단순한
컨테이너, Bean을생성
하고분배
하는 책임을 지는 클래스
ApplicationContext
: 빈팩토리와 유사한 기능을 제공하지만좀 더 많은 기능
을 제공하는 어플리케이션 컨텍스트
추가기능:
- 국제화가 지원되는 텍스트 메시지를 관리
- 이미지같은 파일 자원을 로드 할 수 있는 포괄적인 방법을 제공
- 리너스로 등록된 빈에게 이벤트 발생을 알려 줌
한 개
의 Bean 객체만을 생성싱글톤(singleton)
범위를 갖는다고 표현단일 객체(single object)
를 의미
- 이때 singleton은 디자인 패턴의 singleton과는 약간의 차이가 존재
- 스프링의 싱글톤은 직접 오브젝트를 만들고 관리
- 자바의 싱글톤 = private static으로 인스턴스 생성 / 스프링의 싱글톤 = 싱글톤 레지스트리
- 자세한 사항은 링크 참조: https://bit.ly/2MG41KR