스프링을 이용한 자바 프로젝트 진행 과정은 아래와 같다.
pom.xml 파일이 프로젝트 root에 위치src/main/javasrc/test/javatarget
pom.xmlpom.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