본문 바로가기

내일배움캠프/Today I Learned

[TIL] 나의 마흔 한번째 회고록

1일 1개념


이번주는 프로젝트를 하면서 

정확하게 알고싶었던 개념들을 하나씩 살펴보려고 한다. 

 

그 중에서도

오늘은 @Bean과 @Component 차이점과 사용방법에 대해 알아보려고 한다:D

 

스프링은 개발의 제어권이

스프링 컨테이너(IoC 컨테이너)에 있다고 한다.

IoC(Inversion Of Control)는 제어의 역전이라고 불린다.

 

스프링이 개발자 대신 객체를 제어하기 위해서는 객체들이 빈(Bean)으로 등록되어 있어야 한다. 

스프링 MVC에서는 @Controller, @Service, @Repository 등으로 빈으로 등록할 수 있으며,

configuration관련 객체들은 @Bean과 @Component으로 스프링 컨테이너에 

객체를 Bean으로 등록할 수 있다. 

 

 

그렇다면,,

Bean과 Component의 차이는 무엇일까??

 

 

1. @Bean은 메소드 레벨에서 선언하며,

반환되는 객체(인스턴스)를 개발자가 수동으로 빈 등록을 하는 어노테이션이다. 

 

2. @Component는 클래스 레벨에서 선언함으로서 스프링이 런타임시에 

컴포넌트 스캔을 하여 자동으로 빈을 찾고 등록하는 어노테이션이다. 

 

@Bean @Component
메소드에 사용 클래스에 사용
개발자가 컨트롤이 불가능한 
외부 라이브러리 사용 시 사용
개발자가 직접 컨트롤이 가능한
내부 클래스에 사용

 

 

@Bean의 사용 예를 들어보면

Spring Security에서 제공하는 PasswordEncoder는 Spring Security 개발자에 의해 만들어진 클래스(라이브러리)이다. 

때문에 따로 수정하는 것은 어렵다. 

PassowordEncoder를 사용하기 위해서는 스프링에 Bean으로 등록해야 하는데

이때 사용할 수 있는 방법은 @Bean 어노테이션을 이용하여 등록하는 방법이 있다. 

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

 

 

@Component의 경우

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

그래서 @Configuration, @Controller, @Service, @Repository등의 어노테이션들은

@Component 어노테이션을 포함하고 있다. 

 

@Component는 타입을 통해 등록된 Bean 객체를 가져올 수 잇다. 또한 Ioc 컨테이너 객체를 생성할 때 자동으로 객체가 생성되며, Singleton이다. 

 

 

 

 

 

@출처 : https://youngjinmo.github.io/2021/06/bean-component/

 

Bean과 Component 차이

스프링은 개발의 제어권이 스프링 컨테이너(IoC 컨테이너)에 있다고 한다. 그래서 이를 IoC(Inversion Of Control), 제어의 역전이라고 한다. 스프링이 개발자 대신 객체를 제어하기 위해서는 객체들이

youngjinmo.github.io

@출처 : https://programmingrecoding.tistory.com/13

 

@Component 어노테이션

@Component 어노테이션을 이용하면 Bean Configuration 파일에 Bean을 따로 등록하지 않아도 사용할 수 있다. 빈 등록자체를 빈 클래스 자체에다가 할 수 있다는 의미이다. @Component 어노테이션은 기본적으

programmingrecoding.tistory.com