스프링 공부/어노테이션 정리

@Configuration

장아장 2022. 12. 28. 13:58

정의

Congifuration은 설정을 만들거나, 내부에 @Bean을 만들기 위해 클래스에 적용시키는 어노테이션이다.
클래스에 Configuration 어노테이션을 등록하면 해당 클래스를 설정에 대해 사용해줄 수 있고, @Bean을 통해 SpringBean을 등록할 수 있다.  


특징

@Configuration을 통해 해당 클래스가 설정에 대한 파일임을 알 수 있다. 

내부의 메서드(Bean으로 호출된)을 가져올 경우, 클래스를 호출해 내부의 메서드를 호출하는 방식이 아닌, 메서드만을 호출하는 방식이다. 

또한, 내부에 @Bean을 통해 Spring Bean을 등록할 것임을 알 수 있다. 
주의점 : @Configuration은 Bean을 등록하기 위한 어노테이션이라는 것은 아니다. 

 

방식

 
public class AppConfig {

    @Bean
    public void printStateA(){
        System.out.println("AppConfig.A");
    }
    @Bean
    public void printStateB(){
        printStateA();
        System.out.println("AppConfig.B");
    }
}

위의 코드에서, 

public void printBeans(){
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    System.out.println(context.getBean(AppConfig.class));
}

 

이런 방식으로 3개의 Bean이 확인된다. 

 

 

 

 

@Configuration
public class AppConfig {

    @Bean
    public void printStateA(){
        System.out.println("AppConfig.A");
    }
    @Bean
    public void printStateB(){
        printStateA();
        System.out.println("AppConfig.B");
    }
}

여기처럼 @Configuration을 달아주면, 

여기처럼 결국 쓰이는 최종 Bean A, B만 불러지게 된다. 

 

 

 

 

@Congifuration을 통한 두 가지 장점이 존재한다. 

  1. 싱글톤 : Bean만 존재했을 때, 스프링 빈으로 호출은 되지만, 싱글톤으로 유지되지는 않는다(즉, 중복적으로 호출이 생긴다)
    이를 @Configuration을 통해 싱글톤으로 유지시킬 수 있다. 
  2. 클래스 호출 : Bean만 존재했을 때, 결국 Bean을 호출하기 위한 클래스를 한번 호출하고, 해당 클래스에서 Bean들을 뽑아와 사용한다. 하지만, @Configuration을 통해 해당 클래스를 호출하는 과정을 줄일 수 있다. 

'스프링 공부 > 어노테이션 정리' 카테고리의 다른 글

@EventListner  (0) 2024.02.02
@뭐시깽이Constructor  (0) 2023.01.02
@JsonInclude  (0) 2023.01.02
@Log(@Slf4j를 써보다가 궁금해서 찾아본 내용 정리)  (3) 2023.01.01
@Bean  (0) 2022.12.28