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/
@출처 : https://programmingrecoding.tistory.com/13
'내일배움캠프 > Today I Learned' 카테고리의 다른 글
[TIL] 나의 마흔 세번째 회고록 (0) | 2023.01.11 |
---|---|
[TIL] 나의 마흔 두번째 회고록 (0) | 2023.01.10 |
[TIL] 나의 마흔 번째 회고록 (0) | 2023.01.06 |
[TIL] 나의 서른 아홉번째 회고록 (2) | 2023.01.05 |
[TIL] 나의 서른 여덟번째 회고록 (0) | 2023.01.04 |