프로그래밍/Java

[Spring, Spring Boot] @Configuration이란 ?

차나니 2024. 4. 12. 18:30

@Configuration이란 ?

Spring, Spring Boot에서 Bean을 수동으로 등록하기 위해서는, class 상단에 @Configuration 어노테이션을 적용해주고, @Bean을 사용해 수동으로 빈을 등록할 수 있습니다 !

빈을 생성할 때 메서드의 이름으로 빈의 이름이 결정됩니다. 그러므로 중복된 빈의 이름이 존재하지 않도록 주의해줘야합니다 !

@Configuration
public class DatabaseConfig {

    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
}

예시 코드와 같이 의존성 주입을 위해 @Configuration을 사용합니다 !

 

@Configuration의 역할

@Configuration은 단순히 빈을 등록하기 위한 어노테이션이 아닙니다 :)

빈을 등록할 때 싱글톤(singleton)이 되도록 보장해주고, 스프링 컨테이너에서 빈을 관리할 수 있게됩니다.

즉, @Bean만 사용해도 스프링 빈으로 등록은 되지만 싱글톤이 유지되지 않습니다.

위와 같이 AppConfig를 상속한 proxy AppConfig가 빈으로 등록되고, 싱글톤이 되도록 보장해줍니다 !

AppConfig@CGLIB의 예상 코드는 아래와 같습니다.

@Bean
public MyBean myBean() {
    if (myBean이 이미 스프링 컨테이너에 등록되어 있으면?) { 
        return 스프링 컨테이너에서 찾아서 반환;
    } else { //스프링 컨테이너에 없으면 기존 로직을 호출해서 myBean을 생성하고 스프링 컨테이너에 등록 
        return 생성 후 반환
    } 
}

 

@Bean이 붙은 메서드마다 이미 스프링 빈이 존재하면 존재하는 빈을 반환하고, 스프링 빈이 없으면 생성해서 스프링 빈으로 등록하고 반환하는 코드가 동적으로 만들어지기 때문에 싱글톤이 보장되는 것입니다 !