티스토리 뷰

Server/Spring

[Spring] 빈 객체

SdardewValley 2021. 10. 30. 22:00
반응형
@Configuration
public class AppContext {

    @Bean
    public Greeter greeter() {
        Greeter g = new Greeter();
        g.setFormat("Hello, %s!");
        return g;
    }
}

 

@Configuration

  • 클래스를 스프링 설정 클래스로 지정

 

@Bean

  • 빈 객체: 스프링이 생성하고 관리하는 객체
  • 스프링은 객체를 생성하고 초기화하는 기능을 제공
  • @Bean이 붙은 메서드가 생성하는 객체는 스프링이 관리하는 빈 객체로 등록됨
  • 해당 어노테이션이 붙은 메서드는 객체를 생성하고 초기화해야 함

 

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

 

AnnotationConfigApplicationContext

  • 자바 설정에서 정보를 읽은 다음, 빈 객체를 생성하고 관리
  • 인자로 받은 클래스(AppContext)의 @Bean 정보를 읽고 객체를 생성하고 초기화

 

getBean

  • AnnotationConfigApplicationContext가 생성한 빈 객체를 검색하기 위해 사용
  • 첫번째 파라미터: 메서드 이름(@Bean이 붙은 메서드)
  • 두번째 파라미터: 검색할 빈 객체의 타입

 

Maven dependency graph

스프링의 핵심기능은 객체를 생성하고 초기화 하는 것이다. 이는 ApplicationContext라는 인터페이스에 정의되어 있다.

 

AnnotationConfigApplicationContext는 ApplicationContext를 구현한 클래스이다. AnnotationConfigApplicationContext 클래스는 자바 클래스에서 정보를 읽은 다음, 객체 생성과 초기화를 한다.

 

BeanFactory

  • 가장 위에 있는 인터페이스
  • 객체 생성과 검색 관련한 기능을 정의
  • getBean 메서드는 이 인터페이스에 정의되어 있음

 

 

하단의 클래스들이 객체의 정보를 가져오는 방법

  • AnnotationConfigApplicationContext: 클래스
  • GenericXmlApplicationContext: XML
  • GenericGroovyApplicationContext: 그루비코드

 

구현 클래스는 설정 정보로부터 빈 객체를 생성하고 내부에 보관하고 getBean 메서드로 빈 객체를 제공한다.

 

 

스프링 컨테이너

  • 빈 객체를 관리
  • Application Context, BeanFactory 등이 해당
  • 내부적으로 빈 객체와 빈 이름을 연결하는 정보를 소유

 

싱글톤 객체

Greeter g1 = ctx.getBean("greeter", Greeter.class);
Greeter g2 = ctx.getBean("greeter", Greeter.class);
System.out.println("(g1 == g2)?" + (g1 == g2)); // true

실행 결과

g1과 g2는 같은 객체이다. 즉, getBean은 같은 객체를 리턴한다.

 

스프링은 기본적으로 한 개의 빈 객체를 생성한다. 싱글톤은 단일 객체를 의미하고, 하나만 생성된 객체는 싱글톤 범위를 갖는다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함