[Spring] @Component vs @Bean

Martin the dog·2023년 7월 4일

스프링 복습하기

목록 보기
3/15

들어가기전 기초지식

용어 정의

@Component

클래스에 붙는 어노테이션으로 스프링 프레임워크에서 관리할 클래스임을 나타내는 것이다.

Dependency

한국어로 하면 의존성으로 한클래스가 다른 클래스에 의존하고 있는것
EX)

Class A{
	private class B;
 ///

A가 B를 의존하고 있다

Component Scan

Component가 어디 있는지 위치를 알려주기 위한 것으로 자바 스프링 부트에서는 @ComponentScan("위치") 를 통해 위치 하위에 있는 모든 컴포넌트들을 스캔한다. 생략시 현재 컴포넌트를 기준으로 한다.

DependenCy Injection

지역하면 의존성 주입으로 컴포넌트로 스캔된 클래스의 의존성이 무엇인지 확인하고 해당 의존성을 해결시켜주는 것이다. 이를 유저가 하는 것에서 스프링이 하는 것으로 바꾼 것을 IOC(Inversion Of Control)이라 한다.

그럼 @Bean이랑 @Component의 차이가 뭐야?

둘다 해당 어노테이션이 붙은 대상을 Bean에 등록시켜준다는 공통점이 있다.
하지만 그 둘의 차이가 있는데

헤더@Component@Bean
어디에 사용되는지?자바클래스에 사용빈에 등록시킬 클래스를 생성하는 함수에 사용되며 특히 Spring Configuration에서 클래스 생성 함수에 사용된다
사용 난이도매우 쉬움(붙이기만 하면 된다)상대적으로 어렵다(직접 하나하나 붙여야 한다, 생성 로직을 작성해야한다.)
Autowiring@Autowired로 필드에 직접, 세터, 생성자로 주입 가능클래스를 생성할 Bean에 등록시키고자 하는 클래스를 직접 생성하거나 파라미터로 받는다.
누가 만드는지Spring framework생성자 빈을 직접 정의해야한다.
언제 쓰는게 좋을까?직접 작성한 클래스를 빈에 등록시키려 할때1. 의존성을 주입할때 특정 로직을 실행시켜주고 싶을때 2. 내가 만든게 아닌 다른 사람의 로직을 사용할때

이다.

다시 정리하여 말하자면 외부 라이브러리에서 사용되는 클래스를 Bean에 등록시켜줄 때는 해당 클래스는 외부에 있기 때문에 @Component를 통해 등록시킬 수 없다. 그렇기 때문에 해당 클래스를 Bean에 등록시키기 위해 @Bean을 이용한다.

@SpringConfiguration
public class Configuration{
	@Bean
    public outerClass getOuterClass(){
    	//custom logic
    	return new outerClass();
    }
}
profile
Happy Developer

0개의 댓글