[Spring] 스프링 @Bean과 @Component의 차이

AlBan·2021년 5월 15일
1

Spring

목록 보기
4/13
post-thumbnail

공부를 하며 여러가지 스프링 프로젝트를 생성하고 만들어 나갔다. 그러면서 항상 쓰던것이 @Bean@Component였다.

그러다 문득, @Bean@Component의 차이가 궁금해져 정의를 내려보려 했으나 제대로 정의하지 못했고 알아보고 정리하려 한다.

@Bean

@Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고싶은 경우에 사용된다

예를들어, Spring Security에서 제공하는 PasswordEncoder는 Spring Security 개발자에 의해 만들어진 클래스(라이브러리)이다. 때문에 따로 수정하는것은 힘들다.
더해서 PasswordEncoder를 사용하기 위해서는 스프링에 Bean으로 등록을 해야하는데 이 때 사용할 수 있는 방법이 @Bean 어노테이션을 이용한 등록 방법이다.

@Bean을 이용한 빈 등록 방법은 다음과 같다.

해당 클래스의 객체를 반환하는 메서드를 만들고, 메서드에 @Bean을 선언하여 등록하면 된다.

@Component

@Component의 경우 @Bean과는 반대로 개발자가 직접 컨트롤할 수 있는 클래스에 사용한다.

개발자가 컨트롤 할 수 있는 클래스는 개발자가 만든 클래스를 의미하며, 컨트롤러 등에 사용하는 클래스를 의미한다.

그래서 @Configuration,@Controller,@Service,@Repository등의 어노테이션들은 @Component어노테이션을 포함하고 있다.

@Bean, @Component 어노테이션 비교

@Bean의 @Target은 METHOD로 되어있다.

@Component의 Target은 Type으로 지정되어 Class에만 선언될 수 있다.

profile
[Spring, React를 공부하는 끈질긴 개발자 지망생] 잊어버리지 않도록! 정리 또 정리!

0개의 댓글