์ด๋ฒ ํฌ์คํ ์์๋ Maven ์ค์น ๋ฐ Maven project๋ฅผ importํ์ฌ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
https://maven.apache.org/
์์ ์ฌ์ดํธ์ ๋ค์ด๊ฐ์ ์ต์ ๋ฒ์ ์ Maven์ ๋ค์ด๋ฐ์ ์ค๋๋ค.
์ ๋ ์์คํ
๋ณ์
๊ฐ ์๋ ์ฌ์ฉ์ ๋ณ์
๋ก ์ค์ ํด ์ฃผ์์ต๋๋ค.
PATH
: Path ๊ฒฝ๋ก์ "[๋ฉ์ด๋ธ ์ค์นํด๋]\bin"์ ์ถ๊ฐํฉ๋๋ค. ์ ์ ๊ฒฝ์ฐ์๋ ์๋์ ๊ฐ์์ต๋๋ค.
์๋์ ๊ฐ์ด cmd ์ฐฝ์ mvn - version
๋ฅผ ์
๋ ฅํ์์ ๋, ์ค์นํ Maven์ ๋ฒ์ ์ด ๋์ค๋ฉด ์ฑ๊ณต์
๋๋ค.
workspace ์๋์ import ํ ํ๋ก์ ํธ ๋ช
์ผ๋ก ํด๋๋ฅผ ๋ง๋ ํ ์๋์ ๊ฐ์ด ํ์ํด๋๋ค์ ์์ฑํด์ค๋๋ค. ์ฌ๊ธฐ์๋ 01.CHAP01
์ด ํ๋ก์ ํธ ๋ช
์
๋๋ค.
์์ ๊ฐ์ด ํด๋์์ฑ์ ์๋ฃํ๋ค๋ฉด, pom.xml
ํ์ผ์ ํ๋ก์ ํธํ์ผ ์๋์ ๋ง๋ค์ด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ xml ํ์ผ์ ์์ฑํด์ค๋๋ค. ๋ฉ๋ชจ์ฅ์ผ๋ก๋ ์ถฉ๋ถํ ๊ฐ๋ฅํ์ง๋ง ์ ๋ Notepad++
๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ํ ์ ์ฅํ์์ต๋๋ค.
C:/PRACTICE/00.TOBY/01.CHAP01/workspace/01.CHAP01/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>01.CHAP01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<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>
<artifactId>01.CHAP01</artifactId>
: ํ๋ก์ ํธ์ ์๋ณ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ๋ก์ ํธ ํด๋์ ๋์ผํ๊ฒ ์ง์ ํ์์ต๋๋ค.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
: ํ๋ก์ ํธ์์ 5.0.2.RELEASE ๋ฒ์ ์ spring-context ๋ชจ๋์ ์ฌ์ฉํ๋ค๊ณ ์ค์ ํฉ๋๋ค.
<plugin>
<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>
: JDK 1.8 ๋ฒ์ ์ผ๋ก ์๋ฐ ์์ค๋ฅผ ์ปดํ์ผํฉ๋๋ค. ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์์ค์ฝ๋๋ฅผ ์ฝ์ ๋, ์ฌ์ฉํ ์ธ์ฝ๋ฉ์ UTF-8 ์
๋๋ค.
์์ pom.xml
์์ dependency์ plugin์ ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ์ค์ ํ์ต๋๋ค. ์ฌ๊ธฐ์ dependency ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
Maven์ ํ ๊ฐ์ ๋ชจ๋์ artifact
๋ผ๋ ๋จ์๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ ์ค์ ์ spring-context๋ผ๋ ์๋ณ์๋ฅผ ๊ฐ์ง 5.0.2.RELEASE ๋ฒ์ ์ ์ํฐํฉํธ์ ๋ํ ์์กด(dependency)์ ์ถ๊ฐํ ๊ฒ์
๋๋ค.
์ฌ๊ธฐ์ ์์กด์ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ์ผ๋ฐ์ ์ธ ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์
์์ ํด๋์ค ํจ์ค์ spring-context ๋ชจ๋์ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ๋ปํฉ๋๋ค.
๊ฐ ์ํฐํฉํธ์ ์์ ํ ์ด๋ฆ์ ์ํฐํฉํธ์ด๋ฆ-๋ฒ์ .jar
์ด๋ฏ๋ก, ์ ์ค์ ์ Maven ํ๋ก์ ํธ์ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ์คํํ ๋ ์ฌ์ฉํ ํด๋์ค ํจ์ค์ spring-context-5.0.2.RELEASE.jar
ํ์ผ์ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ์๋ฏธ ํฉ๋๋ค.
์ด์ ํฌ์คํ
์ธ ๐งฉ ํ๋ก์ ํธ ์ธํ
์ ๋ณด๋ฉด ํ๋ก์ ํธ ๋ด์ repository ํด๋์ setting.xml
ํ์ผ์ด ์กด์ฌํ๋๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ๋ฒ์ ํ์ฉํ๋ฉด ํ๋ก์ ํธ์์ ๋ค์ด๋ก๋๋๋
Maven ํ์ผ๋ค(ex. spring-context-5.0.2.RELEASE.jar
)์ด ๋ชจ๋ ํ๋ก์ ํธ ํด๋ ๋ด์ repository๋ก ์ ์ฅ๋ฉ๋๋ค.
Maven ํ๋ก์ ํธ๋ฅผ Eclipse์ import ํ๋ ค๋ฉด File - Import...
๋ฉ๋ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด ๋ฉ๋ด๋ฅผ ์คํํ๋ฉด ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ฐฝ์ด ํ์๋ฉ๋๋ค. ์๋์ ํ๋ฉด์์ Maven/Existing Maven Projects
๋ฅผ ์ ํํ ํ Next
๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
์ฌ๊ธฐ์ Browse...
๋ฒํผ์ ๋๋ฌ ์์ ์์ฑํ Maven ํ๋ก์ ํธ ํด๋๋ฅผ Root Directory:
๋ก ์ ํํด ์ฃผ๋ฉฐ, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋์จ๋ค๋ฉด Finish
๋ฒํผ์ ๋๋ฌ์ ๋ง๋ฌด๋ฆฌํด ์ค๋๋ค.
๊ธฐ๋ค๋ฆฌ๋ฉด ์๋์ ๊ฐ์ด Eclipse์ ํ๋ก์ ํธ๊ฐ import ๋๋๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Eclipse์ ์์ฑ๋ ํ๋ก์ ํธ๋ฅผ ๋ณด๋ฉด ๋ค์์ ์ ์ ์์ต๋๋ค.
src/main/java
ํด๋Maven Dependencies
Maven Dependencies
์ ๋ฑ๋ก๋ jar ํ์ผ๋ค์ ์์ ์ค๋ช
ํ repository
์ ์์นํฉ๋๋ค. ์ค์ ๋ก Eclipse๋ Maven ํ๋ก์ ํธ๋ฅผ import ํ ๋ ํ์ํ ๋ชจ๋ jarํ์ผ์ ๋ก์ปฌ๋ก ๋ฐ์์จ ๋ค์ ๊ทธ ํ์ผ์ ํด๋์คํจ์ค์ ์ถ๊ฐํฉ๋๋ค.
์ด์ Eclipse๋ฅผ ์ด์ฉํด์ Spring์ ์ด์ฉํ ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ์ค๋น๊ฐ ๋๋ฌ์ต๋๋ค. ์ด์ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๋จํ๊ฒ Spring์ ์ด์ฉํ ํ๋ก๊ทธ๋จ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ๋ค์์ ์์ฑํ ํ์ผ์ ๋๋ค.
Greeter.java
: ์ฝ์์ ๊ฐ๋จํ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ์๋ฐ ํด๋์คAppContext.java
: Spring ์ค์ ํ์ผMain.java
: main() ๋ฉ์๋๋ฅผ ํตํด Spring๊ณผ Greeter๋ฅผ ์คํํ๋ ์๋ฐ ํด๋์ค๋จผ์ Eclipse์์ src/main/java
์์ค ํด๋์ chap02
ํจํค์ง๋ฅผ ์์ฑํ ํ ํด๋์ค๋ค์ ๋ชจ๋ ์ถ๊ฐํด ์ค๋๋ค.
01.CHAP01/src/main/java/chap02/Greeter.java
package chap02;
public class Greeter {
private String format;
public String greet(String guest) {
return String.format(format, guest);
}
public void setFormat(String format) {
this.format = format;
}
}
Greeter ํด๋์ค์ greet() ๋ฉ์๋๋ String์ ๋ฌธ์์ด ํฌ๋งท์ ์ด์ฉํด์ ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํฉ๋๋ค. greet() ๋ฉ์๋์์ ์ฌ์ฉํ ๋ฌธ์์ด ํฌ๋งท์ setFormat() ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์ค์ ํ๋๋ก ๊ตฌํํ์์ต๋๋ค.
Greeter ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด Greeter ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค, setFormat() ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ฌธ์์ด ํฌ๋งท์ ์ง์ ํ๊ณ , greet() ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ฉ์์ง๋ฅผ ์์ฑํ ๊ฒ์
๋๋ค.
Greeter greeter = new Greeter();
greeter.setFormat("%s, ํค์");
String str = greeter.greet("Spring"); //str์ "Spring, ํค์"๊ฐ ๋๋ค.
01.CHAP01/src/main/java/chap02/AppContext.java
package chap02;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppContext {
@Bean
public Greeter greeter() {
Greeter g = new Greeter();
g.setFormat("%s, ํค์");
return g;
}
}
06ํ์ @Configuration
์ด๋
ธํ
์ด์
์ ํด๋น ํด๋์ค๋ฅผ Spring ์ค์ ํด๋์ค๋ก ์ง์ ํฉ๋๋ค.
AppContext.java
์์ ํต์ฌ์ @Bean
์ด๋
ธํ
์ด์
์๋์ ์๋ ์ฝ๋์
๋๋ค. Spring์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ์ด ์ฝ๋๊ฐ ํ ๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ์ค์ ์ ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
Spring์ด ์์ฑํ๋ ๊ฐ์ฒด๋ฅผ Bean ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์ด Bean ๊ฐ์ฒด์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๋ฉ์๋๊ฐ greeter() ๋ฉ์๋์
๋๋ค. ์ด ๋ฉ์๋์๋ @Bean
์ด๋
ธํ
์ด์
์ด ๋ถ์ด ์์ต๋๋ค.
@Bean
์ด๋
ธํ
์ด์
์ ๋ฉ์๋์ ๋ถ์ด๋ฉด ํด๋น ๋ฉ์๋๊ฐ ์์ฑํ ๊ฐ์ฒด๋ฅผ Spring์ด ๊ด๋ฆฌํ๋ Bean ๊ฐ์ฒด๋ก ๋ฑ๋กํฉ๋๋ค.
@Bean
์ด๋
ธํ
์ด์
์ ๋ถ์ธ ๋ฉ์๋์ ์ด๋ฆ์ Bean ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ ๋ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด Spring์ด ํ์ฌ ์ฝ๋์ @Bean
์๋์์ ์์ฑํ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ ๋ greeter๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค. ์ด ์ด๋ฆ์ Bean ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ ์ฌ์ฉ๋๋ฉฐ, ๋ค์์ ์ด ๊ฐ์ ์ฌ์ฉํ ๊ฒ์
๋๋ค.
@Bean
์ด๋
ธํ
์ด์
์ ๋ถ์ธ ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์๋ง๊ฒ ์ด๊ธฐํ ํด์ผ ํฉ๋๋ค. ์ ์ฝ๋์์๋
g.setFormat("%s, ์๋
ํ์ธ์!");
์์ Greeter ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๊ณ ์์ต๋๋ค.
01.CHAP01/src/main/java/chap02/Main.java
package chap02;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(AppContext.class);
Greeter g = ctx.getBean("greeter", Greeter.class);
String msg = g.greet("Spring");
System.out.println(msg);
ctx.close();
}
}
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
: AnnotationConfigApplicationContext ํด๋์ค๋ ์๋ฐ ์ค์ ์์ ์ ๋ณด๋ฅผ ์ฝ์ด์ Bean ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํฉ๋๋ค.
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(AppContext.class);
: AnnotationConfigApplicationContext ๊ฐ์ฒด๋ฅผ ์์คํ ๋ ์์ ์์ฑํ AppContext ํด๋์ค๋ฅผ ์์ฑ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํฉ๋๋ค.
AnnotationConfigApplicationContext๋ AppContext์ ์ ์ํ @Bean
์ค์ ์ ๋ณด๋ฅผ ์ฝ์ด์ Greeter ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํฉ๋๋ค.
Greeter g = ctx.getBean("greeter", Greeter.class);
: getBean() ๋ฉ์๋๋ AnnotationConfigApplicationContext๊ฐ ์๋ฐ ์ค์ ์ ์ฝ์ด์ ์์ฑํ Bean ๊ฐ์ฒด๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
getBean() ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ @Bean
์ด๋
ธํ
์ด์
์ ๋ฉ์๋ ์ด๋ฆ์ธ Bean ๊ฐ์ฒด์ ์ด๋ฆ์ด๋ฉฐ, ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ๊ฒ์ํ Bean ๊ฐ์ฒด์ ํ์
์
๋๋ค.
์์ ์์ฑํ ์๋ฐ ์ค์ (AppContext)์ ๋ณด๋ฉด @Bean
๋ฉ์๋์ ์ด๋ฆ์ด greeter ์ด๊ณ ์์ฑํ ๊ฐ์ฒด์ ๋ฆฌํด ํ์
์ด Greeter ์ด๋ฏ๋ก, 10ํ์ getBean() ๋ฉ์๋๋ greeter() ๋ฉ์๋๊ฐ ์์ฑํ Greeter ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํฉ๋๋ค.
@Bean
public Greeter greeter() {
Greeter g = new Greeter();
g.setFormat("%s, ํค์");
return g;
}
String msg = g.greet("Spring");
: 11ํ์์๋ Greeter ๊ฐ์ฒด์ greet() ๋ฉ์๋๋ฅผ ์คํํ๊ณ ์์ต๋๋ค. Greet.java
์ฝ๋๋ฅผ ๋ณด๋ฉด greet() ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋์ด ์์ต๋๋ค.
// format ํ๋๋ setFormat() ๋ฉ์๋๋ก ์ค์ ํจ
public String greet(String guest) {
return String.format(format, guest);
}
์์ AppContext ์ค์ ์ ๋ฐ๋ฅด๋ฉด ์์ฑํ Greeter ๊ฐ์ฒด์ format ํ๋์ ๊ฐ์ "%s, ํค์"
๊ฐ ๋ฉ๋๋ค.
๋ฐ๋ผ์ 11ํ์ g.greet("Spring")
์ฝ๋๋ ๋ค์์ ์ฝ๋์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
String.format("%s, ํค์", "Spring") // ๊ฒฐ๊ณผ : "Spring, ํค์"
์๋์ ๊ฐ์ด Main.java
์์ ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ์ฌ Java Application
์ ํด๋ฆญํด ์ฃผ์ด๋ ๋๊ณ , ctrl + F11
์ ๋๋ฌ์ ์คํํด ์ฃผ์ด๋ ๋ฉ๋๋ค.
์๋์ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉด ์ฑ๊ณต์ ๋๋ค.
์์์ ์์ฑํ Main.java
์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ Bean ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ํด๋น Bean ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
// 1. ์ค์ ์ ๋ณด๋ฅผ ์ด์ฉํด์ Bean ๊ฐ์ฒด๋ฅผ ์์ฑํจ
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(AppContext.class);
// 2. Bean ๊ฐ์ฒด๋ฅผ ์ ๊ณตํจ
Greeter g = ctx.getBean("greeter", Greeter.class);
ApplicationContext(๋๋ BeanFactory)๋ Bean ๊ฐ์ฒด์ ์์ฑ, ์ด๊ธฐํ, ๋ณด๊ด, ์ ๊ฑฐ ๋ฑ์ ๊ด๋ฆฌํ๊ณ ์์ด์ ApplicationContext๋ฅผ ์ปจํ ์ด๋(Container)๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
Spring Container์ Bean ๊ฐ์ฒด ๊ด๋ฆฌ
Spring Container๋ ๋ด๋ถ์ ์ผ๋ก Bean ๊ฐ์ฒด์ Bean ์ด๋ฆ์ ์ฐ๊ฒฐํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๋๋ค. ์๋ฅผ ๋ค์ด chap02.Greeter ํ์ ์ ๊ฐ์ฒด๋ฅผ greeter๋ผ๋ ์ด๋ฆ์ Bean์ผ๋ก ์ค์ ํ๋ค๊ณ ํ๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ Container๋ ๋ค์ ๊ทธ๋ฆผ์ฒ๋ผ greeter ์ด๋ฆ๊ณผ Greeter ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ด๋ฆ๊ณผ ์ค์ ๊ฐ์ฒด์ ๊ด๊ณ๋ฟ๋ง ์๋๋ผ ์ค์ ๊ฐ์ฒด์ ์์ฑ, ์ด๊ธฐํ, ์์กด ์ฃผ์ ๋ฑ Spring Container๋ ๊ฐ์ฒด ๊ด๋ฆฌ๋ฅผ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ฑ๊ธํผ ๊ฐ์ฒด์ ๋ํด ์์๋ณด๊ธฐ ์ํด ์๋ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
01.CHAP01/src/main/java/chap02/Main2.java
package chap02;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main2 {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(AppContext.class);
Greeter g1 = ctx.getBean("greeter", Greeter.class);
Greeter g2 = ctx.getBean("greeter", Greeter.class);
System.out.println("(g1 == g2) = " + (g1 == g2));
ctx.close();
}
}
10ํ๊ณผ 11ํ์ ์ด๋ฆ์ด greeter
์ธ Bean ๊ฐ์ฒด๋ฅผ ๊ตฌํด์ ๊ฐ๊ฐ g1๊ณผ g2 ๋ณ์์ ํ ๋นํฉ๋๋ค.
Greeter g1 = ctx.getBean("greeter", Greeter.class);
Greeter g2 = ctx.getBean("greeter", Greeter.class);
12ํ์์๋ g1๊ณผ g2๊ฐ ๊ฐ์ ๊ฐ์ฒด์ธ์ง ์ฌ๋ถ๋ฅผ ์ฝ์์ ์ถ๋ ฅํฉ๋๋ค.
System.out.println("(g1 == g2) = " + (g1 == g2));
๊ฒฐ๊ณผ๊ฐ ์ด๋ป๊ฒ ๋ ์ง ๊ถ๊ธํ๋๋ฐ, ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด (g1 == g1)
์ ๊ฒฐ๊ณผ๊ฐ true
๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
(g1 == g1)
์ ๊ฒฐ๊ณผ๊ฐ true
๋ผ๋ ๊ฒ์ g1๊ณผ g2๊ฐ ๊ฐ์ ๊ฐ์ฒด๋ผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ ์๋ ์ฝ๋์์ getBean() ๋ฉ์๋๋ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ ๊ฒ์
๋๋ค.
Greeter g1 = ctx.getBean("greeter", Greeter.class);
Greeter g2 = ctx.getBean("greeter", Greeter.class);
๋ณ๋ ์ค์ ์ ํ์ง ์์ ๊ฒฝ์ฐ Spring์ ํ ๊ฐ์ Bean ๊ฐ์ฒด๋ง์ ์์ฑํ๋ฉฐ, ์ด๋ Bean ๊ฐ์ฒด๋ Singleton ๋ฒ์๋ฅผ ๊ฐ๋๋ค
๊ณ ํํํฉ๋๋ค.
Singleton์ ๋จ์ผ ๊ฐ์ฒด(single object)๋ฅผ ์๋ฏธํ๋ ๋จ์ด๋ก์ Spring์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ ๊ฐ์ @Bean
์ด๋
ธํ
์ด์
์ ๋ํด ํ ๊ฐ์ Bean ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ ์ฌ์ฉํ๋ฉด greeter
์ ํด๋นํ๋ ๊ฐ์ฒด ํ ๊ฐ์ greeter1
์ ํด๋นํ๋ ๊ฐ์ฒด ํ ๊ฐ, ์ด๋ ๊ฒ ๋ ๊ฐ์ Bean ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.
@Bean
public Greeter greeter() {
Greeter g = new Greeter();
g.setFormat("%s, ํค์");
return g;
}
@Bean
public Greeter greeter1() {
Greeter g = new Greeter();
g.setFormat("์๋
ํ์ ๊ฐ, %s์ฌ");
return g;
}
Singleton ๋ฒ์ ์ธ์ ํ๋กํ ํ์ ๋ฒ์๋ ์กด์ฌํฉ๋๋ค. ์ด์ ๊ดํ ๋ด์ฉ์ ์ถํ์ ๊ธฐํ๊ฐ ๋๋ค๋ฉด ์ ๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ค๋์ Maven project๋ฅผ importํ์ฌ ๊ธฐ๋ณธ์ ์ธ ์ฝ๋๋ค์ ์คํํด ๋ณด์์ต๋๋ค.
๋ค์์๋ DI ์ฆ Dependency Injectioin
์ ๋ํ ํฌ์คํ
์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
https://www.kame.co.kr/nkm/detail.php?tcode=306&tbook_jong=3
์ค์ตํ ์ฝ๋์
๋๋ค.
https://github.com/LimNakHyun/Spring/tree/main/02.CHAPTER2/src/main/java/chap02