일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 페이코 친구코드
- 배열
- 페이코 초대코드
- php 프로그래밍 입문 문제풀이
- programmers
- 자바 스프링
- 한정 분기
- Java
- 파이썬
- JAVA SPRING
- 자바
- 플러터 개발환경 설정
- SWEA
- 최단 경로
- spring
- php 프로그래밍
- 페이코 추천인코드
- 페이코 추천인
- C언어
- 백준
- php
- 스프링
- php 프로그래밍 입문
- C
- 플러터
- php 프로그래밍 입문 솔루션
- Flutter
- php 프로그래밍 입문 예제
- php 프로그래밍 입문 3판
- php 프로그래밍 입문 연습문제
Archives
- Today
- Total
02-02 06:48
ImJay
[Java Spring] 2-54. 애노테이션 @PostConstruct, @PreDestroy 본문
Java Spring/스프링 핵심 원리 - 기본편
[Java Spring] 2-54. 애노테이션 @PostConstruct, @PreDestroy
ImJay 2023. 8. 8. 15:13반응형
[Java Spring] 2-54. 애노테이션 @PostConstruct, @PreDestroy
우선 코드 먼저 보고 설명하겠다.
package hello.core.lifecycle;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
public class NetworkClient {
private String url;
public NetworkClient() {
System.out.println("생성자 호출, url = " + url);
}
public void setUrl(String url) {
this.url = url;
}
//서비스 시작시 호출
public void connect() {
System.out.println("connect:" + url);
}
public void call(String message) {
System.out.println("call: " + url + " message = " + message);
}
//서비스 종료시 호출
public void disconnect() {
System.out.println("close:" + url);
}
@PostConstruct
public void init() throws Exception {
System.out.println("NetworkClient.afterPropertiesSet");
connect();
call("초기화 연결 메시지");
}
@PreDestroy
public void close() throws Exception {
System.out.println("NetworkClient.destroy");
disconnect();
}
}
package hello.core.lifecycle;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotatedBeanDefinitionReader;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
public class BeanLifeCycleTest {
@Test
public void lifeCycleTest() {
ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
NetworkClient client = ac.getBean(NetworkClient.class);
ac.close();
}
@Configuration
static class LifeCycleConfig {
@Bean
public NetworkClient networkClient() {
NetworkClient networkClient = new NetworkClient();
networkClient.setUrl("http://hello-spring.dev");
return networkClient;
}
}
}
실행결과
생성자 호출, url = null
NetworkClient.init
connect: http://hello-spring.dev
call: http://hello-spring.dev message = 초기화 연결 메시지
19:40:50.269 [main] DEBUG
org.springframework.context.annotation.AnnotationConfigApplicationContext -
Closing NetworkClient.close
close + http://hello-spring.dev
@PostConstruct , @PreDestroy 이 두 애노테이션을 사용하면 가장 편리하게 초기화와 종료를 실행할 수 있다.
@PostConstruct, @PreDestroy 애노테이션 특징
- 최신 스프링에서 가장 권장하는 방법이다.
- 애노테이션 하나만 붙이면 되므로 매우 편리하다.
- 패키지를 잘 보면 javax.annotation.PostConstruct 이다. 스프링에 종속적인 기술이 아니라 JSR-250
라는 자바 표준이다. 따라서 스프링이 아닌 다른 컨테이너에서도 동작한다. - 컴포넌트 스캔과 잘 어울린다.
- 유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것이다. 외부 라이브러리를 초기화, 종료 해야 하면
@Bean의 기능을 사용하자.
정리
- @PostConstruct, @PreDestroy 애노테이션을 사용하자
- 코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 @Bean의 initMethod , destroyMethod를
사용하자.
반응형
'Java Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[Java Spring] 2-56. 프로토타입 스코프 (0) | 2023.08.08 |
---|---|
[Java Spring] 2-55. 빈 스코프란? (0) | 2023.08.08 |
[Java Spring] 2-53. 빈 등록 초기화, 소멸 메서드 지정 (0) | 2023.08.08 |
[Java Spring] 2-52. 인터페이스 InitializingBean, DisposableBean (0) | 2023.08.08 |
[Java Spring] 2-51. 빈 생명주기 콜백 시작 (0) | 2023.08.08 |
Comments