스프링 컨테이너, 빈
스프링 컨테이너?
자바 객체의 생명주기를 관리한다.
스프링 컨테이너에서 자바 객체를 관리함으로서 각각의 객체들은 생명과 소멸 객체간의 연결에 대한 책임에서 벗어나게 된다.
빈(Bean)?
스프링 컨테이너에서 관리되는 자바 객체
스프링 컨테이너의 종류
- BeanFactory
빈의 등록, 생성, 조회 등의 역할을 한다.
getBean() 으로 빈을 인스턴스화 시킬 수 있다.
- ApplicationContext
ApplicationContext도 BeanFactory처럼 빈을 관리할 수 있다.
차이점?
ApplicationContext는 BeanFactory의 빈 관리 기능을 상속받았다.
그 외에도 이미지 파일 자원, 국제화 텍스트 관리 등의 기능이 있으므로 ApplicationContext를 사용하자.
사용 방법
빈을 관리할 객체(보통 AppConfig)에 @Configuration을 사용하여 역할을 명시한 후 @Bean을 메소드에 붙여 빈 등록을 한다.
사실 스테레오타입 애노테이션을 이용하면 이 코드양을 상당수 줄일 수 있다.
스테레오타입(고정관념)이란 특정 요소를 도메인에 맞게 분류하는 것.
@Component, @Controller, @Service, @Configuration, @Repository 등이 있다.
만약 같은 구현체가 2개 이상이어서 스프링이 무엇을 주입해아할지 모른다면?
- @Primary 사용
이 애노테이션을 사용하면 주입 우선순위가 높아진다.- @Qualifier 사용
Qualifier을 통해 객체가 사용되는 상황을 명시하고, 추상체가 사용될 때 이를 명시하게되면 상황에 맞는 의존관계가 주입된다.- @ComponentScan을 통한 패키지 범위제한 or 예외처리
ComponentScan의 basePakages 혹은 basePackageClasses를 통해 빈 탐색범위를 제한할 수 있다.
혹은 includeFilters, excludeFilters를 사용하여 특정 조건을 만족하는 클래스를 스캔 혹은 제외시킬 수 있다.
Bean Scope
총 6개의 빈 스콥이 있으며 기본적으로 싱글톤이다.
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
Bean 생명주기 콜백
- 생성
- @PostConstruct
- InitializingBean(Interface)
- @Bean의 initMethod
- 소멸
- @PreDestroy
- DisposableBean(interface)
- @Bean의 destroyMethod
Author And Source
이 문제에 관하여(스프링 컨테이너, 빈), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bopi447/스프링-컨테이너-빈저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)