반응형
키워드
- 이분 탐색, Bean 생명주기, Aware 인터페이스
학습 내용
이분 탐색
이분탐색의 l, h 그리고 종료 시점의 정답 값, 문제에서 어떤 값을 이분 탐색의 범위로 지정해야 할까와 같은 것을 확실하게 익히기 위해 반복적으로 이분 탐색 문제를 풀었다.
Bean 생명주기
스프링에서 빈이 생성되고 종료되는 시점에 어떤 일이 일어나고 어떻게 콜백 메서드를 지정해주는지 알아보았다.
- 빈은 어노테이션 혹은 XML로 스캔되어지며, 이를 통해 어떤 빈이 등록되어져야하는지 알아낸다.
- 스캔된 빈들은 Aware 인터페이스를 구현하고 있는지 검사한다. (Aware 인터페이스 또한 이번에 알게되었다.)
- 빈이 생성될때 실행되는 생성 콜백 메서드들이 실행된다. (@PostConstruct, @Bean(initMethod), InitializingBean 인터페이스 구현)
- 빈이 소멸될때 실행되는 소멸 콜백 메서드들이 실행된다. (@PreDestory, @Bean(destroyMethod), DisposableBean 인터페이스 구현)
생성 혹은 소멸 콜백의 추천하는 방식은 @PostConstruct, @PreDestroy
이다.
- 이 방식은 JSR-250에 명시된 방식(자바 스펙 요구서)으로 스프링 프레임워크에 의존하지 않기 때문에 추천하는 방식이다.
Aware 인터페이스
스프링 컨테이너의 정보들을 사용하려면 Aware
접미사가 붙은 인터페이스를 구현함으로써 사용할 수 있다.
대표적으로 다음과 같은 인터페이스들이 존재한다.
- ApplicationContextAware : 해당 빈이
ApplicationContext
를 주입받아서 사용할 수 있다. 다른 빈을 검색하는 등에 사용될 수 있다. - BeanFactoryAware : 해당 빈을 생성한
BeanFactory
를 주입받아서 사용할 수 있다. 이를 통해 다른 빈을 가져오거나 하는 작업에 사용될 수 있다. - BeanNameAware : 해당 빈이 스프링 컨테이너에 정의된 이름을 주입받아 사용할 수 있다.
- ResoureceLoaderAware : 외부 리소스에 접근할 수 있는
ResourceLoader
객체를 주입받아 사용할 수 있다. - EnvironmentAware : 애플리케이션의 환경 정보에 접근할 수 있게 해주는 인터페이스이다.
ApplicationContextAware
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.beans.BeansException;
public class MyApplicationContextAwareBean implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public void displayBeanInfo() {
MyBean myBean = (MyBean) applicationContext.getBean("myBean");
System.out.println("Bean 이름: " + myBean.getName());
}
}
- ApplicationContext를 사용하여 다른 빈을 조회할 수 있음
BeanNameAware
import org.springframework.beans.factory.BeanNameAware;
public class MyBeanNameAware implements BeanNameAware {
private String beanName;
@Override
public void setBeanName(String name) {
this.beanName = name;
}
public void printBeanName() {
System.out.println("이 빈의 이름은: " + beanName);
}
}
- 자신이 컨테이너에 등록된 이름을 출력한다.
학습 결과
반응형
'TIL' 카테고리의 다른 글
[ 2024. 10. 08 ] (0) | 2024.10.08 |
---|---|
[ 2024. 10. 05 ] (0) | 2024.10.05 |
[ 2024. 10. 04 ] (0) | 2024.10.04 |
[ 2024. 10. 03 ] (0) | 2024.10.04 |
[ 2024. 10. 01 ] (1) | 2024.10.01 |