보다 더 나은 내일의 나를 위해

[Spring Boot] @Component와 @Bean의 차이는? 본문

spring

[Spring Boot] @Component와 @Bean의 차이는?

H-SC 2022. 6. 13. 17:49

개요

빈 클래스에 @Component 어노테이션을 사용하는 것과 @Configuration 클래스에서 @Bean으로 빈 클래스를 등록하는 것 모두 스프링 빈에 클래스를 등록하는 동작을 하는 어노테이션입니다. 그렇다면 @Component와 @Bean의 차이는 무엇일까요?

 

 

 

@Component

기본적으로 @Component 어노테이션은 빈 클래스 위에 사용해 빈에 등록하는 기능을 합니다.

@Component
public class MyClass {
	...
}

위 코드처럼 작성하게 되면 MyClass 객체가 스프링 빈에 등록됩니다.

@Controller와 @Service 등은 @Component를 포함하고 있으므로 따로 명시해 주지 않아도 스프링 빈에 등록됩니다.

 

@Component를 사용하게 되면 @SpringBootApplication 안에 있는 @ComponentScan을 통해서 빈에 객체가 등록됩니다.

 

 

 

@Bean

@Bean 어노테이션은 빈 설정 파일에 직접 빈으로 등록하는 기능을 합니다.

@Bean 은 @Configuration이 사용된 클래스 내에서 메서드에 붙여 사용합니다.

@Configuration
public class MyConfiguration {

    @Bean
    public MyBeanClass myBeanClass() {
    	return new MyBeanClass;
    }
}

@Bean을 사용하면 패턴 추가, 전략 설정 등 유연하게 빈을 등록할 수 있습니다.

 

이때 @Configuration 어노테이션이 @Component 어노테이션을 사용하고 있으므로 @ComponentScan의 대상이 되기 때문에 빈에 등록할 수 있습니다.

 

 

 

결론

@Component는 클래스에 사용되어 컴포넌트 스캔을 통하여 자동으로 빈을 등록하는 어노테이션입니다.

@Bean은 메서드에 사용되어 개발자가 수동으로 빈으로 등록하는 어노테이션이며, @Component 보다 더 유연하게 사용할 수 있습니다. 또한 @Component를 사용하는 @Configuration이 붙은 클래스 안에서 사용하므로 컴포넌트 스캔의 대상이 되어 빈에 등록할 수 있습니다.

 

 

 

 

Comments