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

@Bean

장아장 2022. 12. 28. 14:54

정의

Spring IOC Container에 해당 Spring Bean을 등록시켜 사용하게 한다. Bean은 스프링에 의해 생성되고 관리되는 객체들을 말하며, 여기에 다른 객체를 추가할 때 @Bean 어노테이션을 넣어 객체를 추가시킬 수 있다. 
여태까지 공부했던 과정에서는, @Configuration어노테이션을 넣은 클래스를 스프링 설정에 사용할 수 있으며, 여기에서 사용할 객체들을 @Bean어노테이션과 메서드를 통해 스프링 빈으로 등록해, 사용할 수 있다. 

 

특징

@Component, @Bean 두가지 방식이 있다. 

@Component 컴포넌트로 설정해준다는 뜻이며, 이 때 ComponentScan을 통해 어디서부터 컴포넌트를 불러와 사용할지 등을 정해주어야 한다. 
@Bean 스프링 빈에 자동 등록되어, 별다른 스캔 없이 가져와 사용할 수 있다. 

사실 아직까지 프로젝트를 만들어보며 Component를 사용해본 적이 없다. 후에 Component를 사용해보며 체득한 부분을 같이 정리해봐야겠다. 

방식

@Configuration
@EnableWebMvc
// http://localhost:8080/swagger-ui/index.html
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.swprogramming"))
                .paths(PathSelectors.any())
                .build()
                .securityContexts(Arrays.asList(securityContext()))
                .securitySchemes(Arrays.asList(apiKey()));
    }

실제로 게시판 만들기 프로젝트에 사용한 코드의 일부이다. 

이런식으로 @Bean 어노테이션을 추가하면, 스프링에서 자체적으로 Spring Bean에 해당 객체를 가져다둔다. 이후, 필요할 때 스프링 빈에서 설정값처럼 가져가 사용할 수 있는 상태로 쓸 수 있다. 

 

빈을 사용했을 때 장점은, 

  1. 스프링 IoC 컨테이너에서 모든 빈들을 싱글톤 객체로 생성한다. 

  2. 해당 객체와 연관 객체에 대한 의존성을 주입해준다. 

  3. 호출된 Bean의 라이프사이클은 호출된 클래스와 함께한다. 
    즉, Bean 객체가 호출되어 가비지 클래스가 생기는 경우를 예방할 수 있다. 

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

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