환경
윈도우즈 10 / 이클립스 2022-06 (4.24.0) / Java SE 18 / 메이븐 3.8.6 / spring-context 5.3.22
교재
책 : 초보 웹 개발자를 위한 스프링5 프로그래밍 입문
영상 : 예제로 배우는 스프링 입문(개정판)
메이븐, 그래들은 프로젝트 관리 툴이다. 패키지 매니징(모듈, 아티펙트)과 빌드 기능을 포함
설정파일로 메이븐은 pom.xml, 그래들은 build.gradle이라는 파일 사용
빌드 관리 도구 Maven과 Gradle 비교하기
project-root 디렉토리에 pom.xml 파일 생성(어딘가의 디렉토리)
└─ root-of-root
└─ helloworld
└─ pom.xml
└─ src
└─ main
└─ java
pom.xml 에 아래와 같이 입력 ( 각 버전은 2022.7.26 시점 최신버전 )<?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>wonjin.maventest</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.22</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>18</release>
</configuration>
</plugin>
</plugins>
</build>
</project>
helloworld경로에서 mvn compile로 의존 아티펙트 다운로드-컴파일-빌드 수행helloworld선택 - Projects에서 pom.xml선택 - [Finish]아키타입을 사용하지 않는 경우
1. [File]-[New]-[Others]로 대화창 열기
2. Maven Project 선택 - [Next]
3. Create a simple project 체크, 루트로 삼을 디렉토리 선택 - [Next]
4. 각 항목 입력. 주의 : Artifact Id는 루트 디렉토리의 이름과 같아야 함
5. 생성 후 pom.xml에 dependencies와 build 내용 기술
6. mvn compile
(어딘가의 디렉토리)
└─ root-of-root
└─ helloworld
└─ pom.xml
└─ src
└─ main
└─ java
└─ [mypackage 패키지]
└─ Main.java
└─ HelloWorld.java
└─ AppContext.java
ApplicationContext
스프링 프로젝트에는 설정 파일이 필요
설정을 기술하는 여러 방식 중 하나로 @Configuration어노테이션을 포함한 자바 파일이 있음
이 자바파일을 컴파일한 바이너리는 런타임에 AnnotationConfigASpplicationContext 객체에 담김
Bean 객체
스프링은 설정파일에서 객체를 생성하고 초기화하는 기능 제공
이 때 생성/초기화 되는 객체를 Bean 객체라 하고 스프링이 관리함
Bean 객체를 반환하는 메소드에는 @Bean어노테이션을 붙임
Main.java를 이클립스에서 자바 어플리케이션으로 실행하면 wonjin, HelloWorld! 출력
// Main.java : 프로그램 진입점
package mypackage;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class);
HelloWorld beanObj = ctx.getBean("helloWorld", HelloWorld.class);
beanObj.print();
ctx.close();
}
}
// HelloWorld.java : Bean객체로 관리할 클래스
package mypackage;
public class HelloWorld {
String name;
public HelloWorld(String name) {
this.name = name;
}
public void print() {
System.out.println(name + ", HelloWorld!");
}
}
// AppContext.java : 스프링 설정파일
package mypackage;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppContext {
@Bean
public HelloWorld helloWorld() {
HelloWorld obj = new HelloWorld("wonjin");
return obj;
}
}
BeanFactory, ApplicationContext 인터페이스를 스프링 컨테이너라 부름
스프링 컨테이너는 내부적으로 bean객체의 이름과 인스턴스에 대한 참조를 저장
bean객체를 관리하는 가장 윗단의 인터페이스 ( = 최상위 스프링 컨테이너 )
ListenableBeanFactory를 거쳐 BeanFactory에 의존하는 인터페이스
BeanFactory의 확장된 인터페이스로 볼 수 있음
bean객체는 둘 중 하나의 범위를 가짐
기본적으로 설정파일에 등록된 bean객체는 싱글톤패턴으로 동작함
scope값을 prototype으로 주어야 여러 개 객체 생성 가능