Spring - Bean

개미는뚠뚠·2023년 7월 3일
0

Spring

목록 보기
4/4
post-thumbnail

Spring을 통해 개발을 시작하고 5개월이 흘렀다. 아직 많이 부족하지만 프로젝트를 진행하면서 많은 지식을 배우고 있고, 틈틈히 개인공부를 통해 지식을 쌓고 있다. 그러나 확실히 front-end 에서 갑자기 spring을 넘어온거라 아직 기초가 많이 부족하다고 느꼈고, 그 부족한 부분을 채우기 위해서 Bean에 대한 내용을 정리해본다.


spring-bean이란?

간단히 말하면 srping-bean은 스프링 spring-container에 의해 관리되는 자바 객체(POJO-Plain Old Java Object)를 의미한다.

Spring Container?

컨테이너는 bean의 생명 주기(생성, 관리, 제거 등)를 관리하며, 생성된 bean에게 추가적인 기능을 제공하는 역할을 한다. 보통 우리가 객체를 관리할 때 어떤 방식을 사용하는가?

  1. new 연산자를 통한 방식
  2. iterface를 통한 방식
  3. 팩토리 호출 방식

위의 3가지 방식 등을 통해서 객체를 생성하고 소멸시킬 것이다. 하지만 spring-container를 사용함으로써 이를 대체할 수 있다. spring-container를 사용함으로써 제어 흐름을 외부에서 관리할 수 있고, 객체들 간의 의존 관계를 container가 런타임 과정에서 알아서 생성을 해준다.


bean 등록

spring 컨테이너는 추후에 깊게 정리하고, 일단 bean에 생성 방식에 대해서 알아보자.
일단 bean은 다양하게 등록하는 방법이 있는데 오늘은 자동/수동 방식으로 Bean을 등록하는 내용을 정리할 것이다.

Controller(공통)

일단 bean을 등록 작업을 진행할 controller를 준비하였다. 오늘은 주석에 맞춰서 자동/수동 방식으로 bean을 등록해보자.

Service1(자동)

ServiceImpl1(자동)

Controller에서 호출한 TestService1부분이다. 위는 Service와 Impl인데 ServiceImpl부분을 보면 @Service 어노테이션이 보일 것이다. 그럼 Bean등록이 완료된 것이다.

?

라고 할 수 있다. 하지만 나도 같은 반응이였고, 그 이유는 다음과 같다.

@Service 어노테이션 정의를 들어가보면 다음과 같이 @Compnent라는 어노테이션이 있다. spring을 실행하면 Component-Scan 통해 Container에 Bean등록이 자동으로 이루어진다.

  • 이 외에도 @Controller/@Service@Repository 어노테이션은 기본적으로 @Component 어노테이션으로 이루어져 선언하는 동시에 자동으로 Bean에 등록이 가능하다.

여기까지가 자동으로 Bean을 등록하는 방법이였다.
이제 수동으로 Bean을 등록하는 방법을 알아보자.

Service2(수동)

ServiceImpl2(수동)

Configuration(수동)

자동과 비슷하게 수동도 Service와 Impl을 생성하였다. 근데 Impl부분에는 있던 @Service 어노테이션이 사라지고, Configuration 이라는 class 파일을 추가로 생성해주었다.
수동으로 Bean에 등록하는 방식은 @Service 어노테이션을 사용하는 것이 아닌 @Configuration@Bean 어노테이션에 위와 같이 정의함으로써 사용할 수 있었다.

Bean 등록결과 확인

Controllor에서 호출한 Bean을 System.out.println()으로 확인한 내용이다.

위와 같은 방식으로 Bean을 등록할 수 있다.


Bean의 Life cycle

Bean의 생명주기는 나중에 블로그 글을 수정하면서 깊게 적어두겠다. 일단은 간단히 Bean의 Life Cycle을 나타낸 이미지와 간략한 설명만 추가해두겠다.

출처 : https://media.geeksforgeeks.org/wp-content/uploads/20200428011831/Bean-Life-Cycle-Process-flow3.png

1) 스프링 컨테이너 생성
2) 스프링 빈 생성 및 의존관계 주입
3) 초기화 콜백 : 빈이 완전히 생성된 후 호출
4) 빈 사용
5) 소멸전 콜백 : 빈이 소멸되기 직전에 호출
6) 스프링 종료 : Bean 파괴는 생성의 역순임


Bean에 관한 내용은 여기서 포스팅을 마친다. 개발 일정이 바쁜 관계로 내용이 조금 부실할 수 있다. 하지만 이렇게 정리를 끝낼 생각은 없고, 아직 설명하지 못한 Bean의 등록방식들이나 Bean의 Life-Cycle, Compnent와 component 개념도 추후 이 포스팅을 수정하면서 추가할 예정이다🔥

0개의 댓글