반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바의 면접
- 리버스 프록시
- mvvm패턴
- 스프링
- 빈 타입 조회
- 싱글톤 패턴
- SOLID원칙
- 참조형 매개변수
- @Tranctional
- 팩토리패턴
- 스프링 싱글톤
- 네트워크
- try-catch
- 포워드 프록시
- Class Loader
- TCP/IP 4계층
- 백준 1935
- 쇠막대기
- removeAll
- 기본형 매개변수
- k번째큰수
- 스프링 컨테이너
- 전략 패턴
- 참조형 반환타입
- 옵저버 패턴
- 백준 2164
- 후위표기식
- 팩토리 패턴
- 스프링 빈
- www.naver.com치면 발생하는일
Archives
- Today
- Total
스파이더 웹 개발
빈 생명주기 콜백 본문
728x90
반응형
어쩔때 사용될까?
데이터베이스 커넥션풀과 같이 애플리케이션 실행시 필요한 연결은 미리 해두고 종료 시점에 연결을 모두 종료하는 작업등이 필요하다
스프링 빈은 생성자 주입을 제외하고 객체생성 -> 의존관계 주입이라는 라이프 사이클을 가진다
스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다
스프링 빈의 이벤트 라이프사이클
스프링 컨테이너 생성 ->스프링 빈 생성 -> 의존관계 주입-> 초기화 콜백 -> 사용-> 소멸전 콜백-> 스프링 종료
초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출
소멸전 콜백: 빈이 소멸되기 직전에 호출
객체의 생성과 초기화를 분리하도록 하자
왜냐하면 생성자안에 초기화 작업보다는 생성과 초기화를 명확하게 나누는 것이 유지보수하기 좋다
스프링 은 3가지 방법으로 빈생명주기 콜백을 지원한다
- 인터페이스(InitializingBean, DisposableBean)
- 설정 정보에 초기화 메서드, 종료 메서드 지정
- @PostConstruct, @PreDestroy 애노테이션 지원
인터페이스(InitializingBean, DisposableBean)
implements InitializingBean, DisposableBean
InitializingBean의 구현 메서드
@Override
//의존관계 주입이 끝나면
public void afterPropertiesSet() throws Exception {
}
DisposableBean의 구현 메서드
@Override
//스프링 종료전
public void destroy() throws Exception {
}
두개의 인터페이스의 메서드를 구현하는데 각각 의존관계 주입이 끝난 후 실행되고 스프링 종료전에 호출되는 메서드이다
해당 방식의 단점은
- 해당 인터페이스는 스프링 전용 인터페이스다. 해당 코드가 스프링 전용 인터페이스에 의존한다.
- 초기화, 소멸 메서드의 이름을 변경할 수 없다.
- 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다
- 거의 사용하지 않는다
설정 정보에 초기화 메서드, 종료 메서드 지정
@Bean(initMethod = "init", destroyMethod = "close") @Bean 설정 정보에 메서드명을 지정해준다
public void init() { //초기화 호출할 메서드
System.out.println("afterPropertiesSet");
connect();
call("초기화 연결 메시지");
}
public void close() { //종료 메서드
System.out.println("destroy");
disconnect();
}
장점
메서드 이름을 자유롭게 줄 수 있다
스프링 빈이 스프링 코드에 의존하지 않는다
코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료메서드를 사용할 수 있다
@PostConstruct, @PreDestroy 애노테이션 지원 ★ (해당 방법을 사용하자)
@PostConstruct
public void init() {
System.out.println("afterPropertiesSet");
connect();
call("초기화 연결 메시지");
}
@PreDestroy
public void close() {
System.out.println("destroy");
disconnect();
}
어노테이션을 붙여주면 끝난다!
단점
외부 라이브러리에는 적용하지 못한다 외부라이브러리를 사용할 경우설정 정보에 초기화 메서드, 종료 메서드 지정 방식을 사용한다
728x90
반응형
Comments