Spring Bean 객체 생성
BeanCreate 프로젝트
- Spring 에서 Bean 객체를 bean configuration file (beans.xml)에 정의를 하고 필요할 때 객체를 가져와 사용하는 방법을 이용
- bean 태그 : 사용할 Bean을 정의하는 태그
bean 태그 기본 속성
- class : 객체 생성에 사용할 클래스 지정 (필수)
- id : Bean 객체 가져오기 위해 사용하는 이름 지정
- lazy-init : 싱글톤인 경우, xml 을 로딩할 때 객체 생성 여부를 설정.
- true : xml 로딩 시 객체를 생성하지 않고, 객체를 가져올 때 생성
- scope : 객체 범위 설정
- singleton : 객체를 하나만 생성해서 사용. 객체를 여러 번 생성해도 동일한 주소값 가져옴
- prototype : 객체를 가져올 때마다 객체를 생성. 객체마다 다른 주소값 가져옴
빈 객체의 생명 주기
BeanLifeCycle 프로젝트
- Spring의 Bean 객체 생성
- Singleton : xml 파일 로딩 시 객체 생성
- Singleton 이고 lazy-init=true : getBean 메서드 사용시 객체 생성
- prototype : getBean 메서드 사용 시 객체 생성
- Spring의 Bean 객체 소멸
- IoC 컨테이너 종료 시 객체 소멸 (ctx.close())
객체 생성과 소멸 시 호출될 메서드 등록
beans.xml 작성시 태그로 지정
객체 생성, 소멸 시 호출될 메서드 지정 가능.
- init-method : 생성시 메서드 지정
- destroy-method : 소멸시 메서드 지정
- default-init-method : init-method 설정하지 않은 경우 호출
- default-destroy-method : destroy-method 설정하지 않은 경우 호출
여러 개 설정된 경우
- default 말고 init, destroy가 호출
에러
- 아무 method를 설정하지 않은 경우
- default 메소드가 없어도 오류 나지 않음.
- init, destroy 메소드가 없으면 오류 발생.
BeanPostProcessor
BeanPostProcessor 프로젝트
init-method 지정된 메소드가 호출되기 전, 후에 다른 메서드를 호출할 수 있음.
- Bean 객체 정의 시, init-method 속성을 설정하면 객체가 생성될 때 자동으로 호출될 메서드를 지정할 수 있음.
- BeanPostProcessor 인터페이스를 구현한 클래스를 정의하면, Bean 객체 생성 시 호출될 init 메서드를 가로채 다른 메서드를 호출할 수 있음.
- postProcessBeforeInitialization : init-method 에 지정된 메소드 호출 전에 호출
- postProcessAfterInitialization : init-method 에 지정된 메소드 호출 후에 호출
- init-method 지정되지 않았어도 자동으로 호출