[Spring5 입문] Annotation, Singleton, AnnotationConfigApplicationContext

2021. 7. 21. 20:44CSE/Spring

** 스프링의 핵심 기능은 객체를 생성하고 초기화 하는 것!

 

1. @Configuration, @Bean 애노테이션

- @Configuration은 클래스 앞에 붙여서 사용하는데, 해당 클래스를 스프링 설정 클래스로 지정한다

- @Bean은 메소드앞에 붙여서 사용하는데, 해당 메소드는 객체를 생성하고 알맞게 초기화 해야 한다.

=> 예시는 AppContext.java를 통해서 확인 (밑에 있음)

 

2. Singleton

: 기본적으로 스프링은 한 개의 빈 객체만을 생성하며, 이 때 빈 객체는 '싱글톤 범위를 갖는다'라고 표현함

: Singleton == '단일 객체'

 

3. AnnotationConfigApplicationContext

: 자바 Annotation을 이용한 클래스로부터 객체 설정 정보를 가져와서 빈 객체를 생성 및 관리함

: getBean() 메소드를 통해 생성한 빈 객체를 검색할 때 사용됨

 

4. 사용 예시 코드

- Greeter.java

public class Greeter {
	public String format;
	
	public String greet(String guest) {
		return String.format(format, guest);
	}
	
	public void setFormat(String format) {
		this.format = format;
	}
}

- AppContext.java

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;
	}
}

- Main.java

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
	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);
		
		String str = g1.greet("스프링");
		System.out.println(str); //스프링, 안녕하세요! 
		System.out.println("(g1 == g2) = " + (g1==g2)); //(g1 == g2) = True
		ctx.close();
	}
}