edcs960.log
로그인
edcs960.log
로그인
[ 2022.10.30 TIL-스프링 컨테이너와 빈 ]
Coosla
·
2022년 10월 29일
팔로우
0
Spring
빈
스프링
스프링 컨테이너
0
TIL
목록 보기
5/29
스프링 컨테이너
✏️ 스프링 컨테이너란?
자바 객체의 생명 주기를 관리
생성된 자바 객체들에게 추가적인 기능을 제공하는 역할
new연산, 인터페이스 호출, 팩토리 호출 방식으로 객체 생성/소멸을 스프링 컨테이너가 대신 해줌
객체 간의 의존관계를 런타임 과정에서 자동으로 설정
✏️ 스프링 컨테이너의 종류
BeanFactory
빈 객체 생성, 의존관계 설정
가장 기본적인 IoC 컨테이너이자 클래스
사용할 때 빈 객체를 로딩하는 방식인 on-demand 방식
빈 생성,의존 관계 설정하는 IoC의 기본 기능에 초점
BeanFactory로 구현한 컨테이너는 의존성 주입 관점만 가지고 있어, 빈이 필요할 때 로딩해주기 때문에 가벼운 경량 컨테이너로 불림
ApplicationContext
BeanFactory를 상속받아 구현한 것으로 BeanFacroty의 확정된 버전으로 생각
런타임 실행 시 모든 빈을 로딩하는 방신인 Eager loading 방식
별도의 정보를 참고해서 빈 생성, 관계 설정 등의 제어를 총괄하는 것에 초점
런타임 시점에 모든 빈을 로딩하기 때문에 무거운 컨테이너라 불림
✏️ BeanFactory VS ApplicationContext
결론적으로 특별한 이유가 없다면 ApplicationContext를 사용하는 것이 좋음
ApplicationContext는 BeanFactory를 상속받아 구현되었기 때문에 BeanFactory의 모든 기능을 포함하고 있고, 추가 기능을 제공
ApplicationContext 추가 기능
Environment
프로파일을 설정하고 어떤 것을 사용할지 선택할 수 있게 해주며, 소스 설정 및 프로퍼티 값을 가져옴
MessageSource
메시지에 대한 국제화를 제공하는 인터페이스
메시지 설정 파일을 모아서 각 국가마다 로컬라이징을 함으로써 각 지역에 맞춤 메시지를 제공할 수 있는 것
스프링 빈
✏️ 스프링 빈이란?
스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미
✏️ 스프링 빈 등록 방식
@Component 어노테이션 이용
@Component 어노테이션을 붙이면 스프링에서 알아서 스프링 컨테이너에 등록
컴포넌트 스캔 대상
@Controller : 스프링 MVC 컨트롤러로 인식
@Repository : 스프링 데이터 접근 계층으로 인식하고 해당 계층에서 발생하는 예외는 모두 DataAccessException으로 반환
@Service : 핵신 비즈니스 계층으로 인식
@Configuration : 스프링 설정 정보를 인식, 스프링 빈이 실글통을 유지하도록 추가 처리
자바 코드로 설정
@Configuration 어노테이션과 @Bean 어노테이션 이용
빈을 등록하기 위해 인스턴스를 생성하는 메소드 위에 @Bean을 명시
@Configuration 내부에 @Component가 있어 자동으로 스캔대상에 포함
@Configuration
public
class
클래스명
{
@Bean
public
클래스명 메소드명
(
)
{
.
.
.
}
}
✏️ @Bean VS @Component
@Bean
개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우 사용
메소드 또는 어노테이션 단위
@Component
개발자가 직접 컨트롤이 가능한 클래스인 경우 사용
클래스 또는 인터페이스 단위
✏️ 싱글톤 빈
스프링 컨테이너에서 한 번만 생성, 컨테이너가 사라질 때 제거
Spring Beans Cache에 저장
빈에 대한 요청과 참조가 있으며 캐시된 객체를 반환
하나만 생성되기 때문에 동일 참조를 보장
빈 스코프를 명시하지 않으면 싱글톤 빈
동기화 문제를 해결하지 않으면 멀티 스레드 환경에서 부작용이 발생할 수 있음
적합한 객체 종류
상태가 없는 공유 객체
읽기 전용으로만 상태를 가진 객체
쓰기가 가능한 상태를 지니면서 사용 빈도가 매우 높은 객체(동기화 전략이 필요)
생명 주기
스프링 컨테이너 생성
스프링 빈 생성
의존관계 주입
초기화 콜백
사용
소멸 전 콜백
스프링 종료
✏️ 프로토타입 빈
DI가 발생할 때 마다 새로운 객체가 생성되어 주입
빈 소멸에 스프링 컨테이너가 관여하지 않고, GC에 의해 빈이 제거
Scope("prototype")을 붙이면됨
적합한 객체 종류
사용할 때마다 상태가 달라져야 하는 객체
쓰기가 가능한 상태가 있는 객체
생명 주기
스프링 컨테이너 생성
스프링 빈 생성
의존 관계 주입
초기화 콜백
사용
GC에 의해 제거
참고
스프링 컨테이너
스프링 컨테이너 - 1
스프링 컨테이너 - 2
스프링 빈
스프링 빈
Coosla
프로그래밍 언어 공부 정리
팔로우
이전 포스트
[ 2022.10.28 TIL-스프링 프레임워크 ]
다음 포스트
[ 2022.10.30 TIL-의존성 주입과 IoC ]
0개의 댓글
댓글 작성