@Bean vs @Component

dongbin_Shin·2021년 8월 6일
0

spring

목록 보기
1/2
post-thumbnail

@Bean어노테이션과 @Component어노테이션 모두 spring(IOC) container에 bean을 등록하도록 하는 어노테이션이다. 하지만 두 어노테이션의 용도가 다르다. 이 차이점을 알아보겠다.


결론

@Bean: 개발자가 작성한 메소드를 통해 반환되는 객체를 Bean으로 등록
@Component: 개발자가 직접 작성한 class를 Bean으로 등록


@Bean

@Bean: 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들고 싶을 때 사용

@Bean
public ObjectMapper objectMapper() {
	return new ObjectMapper();
}

@Bean
public RestTemplate restTemplate() {
	return new RestTemplate();
}

위와 같이 ObjectMapper같은 제어가 불가능한 외부 라이브러리를 Bean으로 등록하기 위해서는 해당 라이브러리의 객체를 반환하는 메소드를 만들고 @Bean을 붙여주면 된다.
이때 Bean id는 메소드 이름을 camel case로 변경한 것이 된다.
ex) objectMapper, restTemplate

@Component

@Component: 개발자가 직접 제어가 가능한 클래스, 즉 개발자가 직접 작성한 class를 Bean으로 등록할때 사용

@Component
public class Account{
	public Account(){
    	System.out.println("my account");
    }
}

위처럼 직접 작성한 class를 Bean으로 등록할 때 @Component를 사용함을 알 수 있다.
이때도 메소드의 camel case가 Bean id로 등록된다.

@Autowired

@Component를 사용한 Bean의 의존성 주입은 @Autowired를 이용한다.
주입 시 type을 통해 해당 자리에 들어올 객체를 판단한다.
이때 주입받을 type이 다형성을 띄면(들어올 수 있는 객체가 여러개) @Qualifier("Bean이름")을 이용해 직접 명시해주어야한다.

@Component
interface Card{}

@Component
class CreditCard implements Card{}

@Component
class CheckCard implements Card{}

@Component
class user{
    @Qualifier("checkCard")
    @Autowired Card card;
}

"본 포스트는 작성자가 공부한 내용을 바탕으로 작성한 글입니다.
잘못된 내용이 있을 시 언제든 댓글로 피드백 부탁드리겠습니다.
항상 정확한 내용을 포스팅하도록 노력하겠습니다."

profile
멋있는 백엔드 개발자

0개의 댓글