@Bean
어노테이션을 붙여 스프링 Bean 객체를 생성@Configuration
어노테이션이 붙은 객체 내부에 @Bean
을 붙여 메소드로 선언한다.빈으로 등록하고 싶은 자바 객체
public class YukongResource {
// 구현
}
Config
@Configuration
public class ResourceConfig {
// 'yukongResource' 이름을 가진 빈 생성
@Bean
public YukongResource yukongResource() {
return new YukongResource();
}
}
@Bean
을 이용해 수동으로 빈을 등록해줄 때에는 메소드 이름으로 빈 이름이 결정된다. 그러므로 중복된 빈 이름이 존재하지 않도록 주의해야 한다.
스프링 컨테이너는 @Configuration
이 붙어있는 클래스를 자동으로 빈으로 등록해두고, 해당 클래스를 파싱해서 @Bean
이 있는 메소드를 찾아 빈을 생성한다.
하지만 어떤 임의의 클래스를 만들어서 @Bean
어노테이션을 붙인다고 되는 것은 아니고, 반드시 @Configuration
어노테이션이 붙은 객체 내에서 등록해야 한다.
스프링 빈으로 등록된 다른 클래스 안에서 @Bean
으로 직접 빈을 등록해주는 것도 동작은 한다. 하지만 @Configuration
안에서 @Bean
을 사용해야 싱글톤을 보장받을 수 있다.
@Bean 을 @Configuration 안에서 사용해야 하는 이유
개발자가 직접 제어가 불가능한 라이브러리를 활용할 때
어플리케이션 전범위적으로 사용되는 클래스를 등록할 때
다형성을 활용하여 여러 구현체를 등록해주어야 할 때
⇒ 하나의 설정 파일에 모두 등록하여 한눈에 파악하기 쉽다.
https://www.notion.so/3-Annotation-based-Configuraion-94c64d255b8842b0b9b8e5daf45b1262#50d7155ae34a433189688c8ce3b2f274