빈이 생성되거나 죽기 전에 스프링이 빈 안의 메서드를 호출해주는 기능.
빈이 생성되고 초기화 할 때 호출하고, 빈이 소멸하기 일보직전에 안전하게 종료할 수 있게하는 메서드를 호출해준다.
ApplicationContext <- ConfigureableApplicationContext <- AnnotationConfigApplicationContext
X O O
(close() 메서드는 ConfigurealbeApplicationContext 부터 있다.)
보통 직접 close 할 일이 없기 때문에 기본 ApplicationContext에서는 지원하지 않는다.
1. networkClient를 빈으로 등록 할 때 생성자를 호출한다.
2. 이 떄는 아직 url 값을 세팅하지 않음.
3. 객체를 생성한 다음 외부에서 setUrl()이 호출되어야 url이 존재한다.
빈 초기화 : 단순히 객체를 생성하는 작업이 아니라 객체 안에 필요한 값이 다 연결되어있는 상태
결과가 이상한 이유 : null이 들어가 있다. ( 당연하게도 )
1. 객체 생성
2. 의존관계 주입
<초기화 콜백>
3. 필요한 데이터 사용
<소멸전 콜백>
4. 스프링 종료
<의존관계 주입> 단계에서 필드주입, setter주입이 일어남.
그러나 생성자주입은 스프링 빈 생성 시 일어남. ( 객체를 생성해야되기 때문에 )
그러면 생성자에 다 박으면 안되나???
-> 기본적으로 new해서 객체를 생성하는 것과 초기화는 분리하는 것이 좋다.
-> 장점 : 생성만 해놓고 기다리다가 최초의 액션이 주어지면 그제서야 초기화하기.( 동작 지연 )
생성자 안에서 해도되는 것 : 객체 내부의 값을 세팅
안되는 것 : 무거운작업, 외부연결맺기 -> 별도의 초기화 메서드로 뺀다.
'Java, Spring > 스프링 핵심 원리 기본' 카테고리의 다른 글
9-1. 빈 스코프란? ~ (0) | 2022.08.08 |
---|---|
8-2. ~ 8-4. 생명주기 콜백 3가지 방법 (0) | 2022.08.08 |
7-7. 어노테이션 직접 만들기 ~ 7-9. 자동vs수동등록 (0) | 2022.08.07 |
7-5. 조회 빈이 2개 이상 - 문제 ~ 7-6 @Autowired필드명, @Qualifier, @Primary (0) | 2022.08.07 |
7-3. 생성자 주입을 선택해라! ~ 7-4. Lombok (0) | 2022.08.07 |