Spring

[Spring] Bean 추가 설명

오잎 클로버 2022. 2. 6. 19:00
728x90

Spring bean

이전 글이 다소 내용이 부실하다고 생각하여

 

조금 더 추가해서 글을 작성하고자 합니다.

 

먼저 @Configuration 어노테이션과 관련해서 추가 설명하고자

그렇기 위해서는 위와 관련된 @Component 어노테이션에 대해서 알아야 합니다.

 

이전 글에서 설명했듯이 

(생략)
Configuration 방식은 Component Scanning을 통해 Bean을 등록하는 방식
(중략)
Life Cycle Callback 중에는 @Component이 붙어있는 모든 Class의 Instance를 생성해
Bean으로 등록하는 작업을 수행하는 Annotation Processor가 등록돼있다.
...

이점이 다소 부족하다고 생각하여 보충하고자 합니다.

 

위 점을 보고 직접 코드를 작성하면, Configuration이나 Component이나

둘 다 Bean을 등록하는 방식이라는 점을 알 수 있습니다.

 

둘이 큰 차이는 없지만

Configuration 내부 코드를 보면

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
	// 생략
}

위와 같이 @Component 어노테이션으로 정의되어 있습니다.

따라서 실질적으로는 @Component와 @Bean을 비교하는 것입니다.

 

둘의 차이점으로는

Component는 개발자가 직접 작성한 Class를 Bean에 등록하고자 할 때 사용

@Configuration + Bean은 외부 라이브러리 또는 내장 클래스를 Bean에 등록하고자 할 때 사용합니다.

또, 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 @Configuration 어노테이션 명시를 해야 합니다.

 

 

그리고 Component Scanning과 관련해서 더 간략하게 설명하기 위해 추가했습니다.

먼저, Spring은 @ComponentScan은 서버 실행 시, @Component 어노테이션 및

streotype(@Controller, @Service, @Repository)이 지정된 클래스들을 찾아 Bean으로 등록해주는 역할을 수행합니다.

※RestController는 @Controller와 @ResponseBody를 하나로 묶은 어노테이션이므로 이 역시 streotype에 속합니다.

 

 

위는 이전 글을 보충하기 위한 내용들이었습니다.

본 내용은 이제부터입니다.

 

BeanFactory

빈을 생성하고 의존관계를 설정하는 기능을 담당하는 가장 기본적인 IoC 컨테이너이자 클래스를 말합니다.

 

이 글에서 작게 설명했었지만, 내용이 너무 적기 때문에 

이번 글의 본 내용이자 보충 차원에서 포스팅하게 되었습니다.

 

BeanFactory는 '빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춘 것'을 보통 의미합니다.

ApplicationContenxt는 '별도의 정보를 참고해서 빈의 생성, 관계 설정 등의 제어를 총괄하는 것에 초점을 맞춘 것'을 의미합니다.의미합니다.

 

스프링 공식 문서를 찾아보니 두 컨테이너 중 특별한 이유가 없다면

ApplicationContext를 사용해야 한다고 나와있습니다.

 

이유는 BeanFactory의 모든 기능을 포함하는 것은 물론이고 아래 추가 기능들을 제공하기 때문입니다.

따라서 이 추가 기능들을 사용하는 것보다 메모리 소모량 축소가 더욱 중요한 상황이

아니라면 추가 기능을 위해 사용하는 것이 좋다.

추가 기능 중 대표적인 것은 아래와 같습니다.

Environment

프로파일(Profile)을 설정하고 어떤 것을 사용할지 선택할 수 있게 해 주며,소스 설정 및 프로퍼티 값을 가져오게 해 준다.

MessageSource

메시지에 대한 국제화(i18n)를 제공하는 인터페이스입니다.
i18n은 internationalization(국제화)의 약칭으로 소프트웨어가 언어에 종속적이지 않고

한국어든 영어든 동시에 입력해서 사용할 수 있어야 하는 것을 만족시켜주는 것을 말합니다.
메시지 설정 파일을 모아서 각 국가마다 로컬라이징을 함으로써 각 지역에 맞춤 메시지를 제공할 수 있는 것입니다.

 

이상입니다.

'Spring' 카테고리의 다른 글

[Spring] Spring DAO, DTO 설명  (0) 2022.02.16
[Spring] Spring Context 설명  (0) 2022.02.13
[Spring] JPA, Hibernate 설명  (0) 2022.02.04
[Spring] Hibernate 설명  (0) 2022.02.03
[Spring] Spring MVC 설명  (0) 2022.02.01