정의
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에 해당 객체를 가져다둔다. 이후, 필요할 때 스프링 빈에서 설정값처럼 가져가 사용할 수 있는 상태로 쓸 수 있다.
빈을 사용했을 때 장점은,
- 스프링 IoC 컨테이너에서 모든 빈들을 싱글톤 객체로 생성한다.
- 해당 객체와 연관 객체에 대한 의존성을 주입해준다.
- 호출된 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 |