public class NetworkClient implements InitializingBean, DisposableBean { // 스프링의 빈 생명주기를 활용하여 초기화 및 소멸 메서드를 정의하는 클래스
private String url; // 네트워크 연결을 위한 URL 저장 변수
public NetworkClient() { // 클래스 생성자
System.out.println("생성자 호출, url = " + url); // 생성자 호출 시 url 초기값(null)을 출력
connect(); // 네트워크 연결 시도
call("초기화 연결 메시지"); // 초기 메시지를 전송
}
public void setUrl(String url) { // URL 설정 메소드
this.url = url; // 인스턴스 변수 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); // 연결 해제 시 출력 메시지
}
@Override
public void afterPropertiesSet() throws Exception { // InitializingBean 인터페이스를 구현한 초기화 메소드
connect(); // 네트워크 연결 메소드 호출
call("초기화 연결 메시지"); // 초기화 시 메시지 전송
}
@Override
public void destroy() throws Exception { // DisposableBean 인터페이스를 구현한 소멸 메소드
disConnect(); // 네트워크 연결 해제 메소드 호출
}
}
@Configuration // 스프링 설정 클래스를 선언, 이 클래스에서 빈의 정의를 함
static class LifeCycleConfig { // 빈의 생명주기 관리를 위한 설정 클래스
@Bean(initMethod = "init", destroyMethod = "close") // 스프링 빈을 선언하고, 초기화 및 소멸 메소드를 지정
public NetworkClient networkClient() { // NetworkClient 타입의 빈을 생성하는 메서드
NetworkClient networkClient = new NetworkClient(); // NetworkClient 객체를 생성
networkClient.setUrl("http://hello-spring.dev"); // 생성된 객체에 URL을 설정
return networkClient; // 설정된 객체를 반환, 스프링 컨테이너에 등록
}
}
애노테이션 @PostConstruct, @PreDestroy
public class NetworkClient { // 네트워크 클라이언트 기능을 제공하는 클래스
private String url; // 네트워크 연결을 위한 URL 저장 변수
public NetworkClient() { // 클래스 생성자
System.out.println("생성자 호출, url = " + url); // 생성자가 호출될 때 url의 현재 상태(여기서는 null)를 출력
connect(); // 네트워크 연결 메소드 호출
call("초기화 연결 메시지"); // 초기 연결 시 메시지를 전송하는 메소드 호출
}
public void setUrl(String url) { // URL을 설정하는 메소드
this.url = url; // 인스턴스 변수 url에 매개변수로 받은 url을 저장
}
public void connect() { // 네트워크 연결 메소드
System.out.println("connect: " + url); // 연결을 시도하며 현재 url을 출력
}
public void call(String message) { // 네트워크를 통해 메시지를 전송하는 메소드
System.out.println("call: " + url + " message = " + message); // 전송하는 메시지와 url을 출력
}
public void disConnect() { // 네트워크 연결을 해제하는 메소드
System.out.println("close: " + url); // 연결 해제 시 url과 함께 출력
}
@PostConstruct // 초기화 콜백 애노테이션, 빈의 속성 설정 후 자동으로 호출됨
public void init() { // 초기화 메소드
System.out.println("NetworkClient.init"); // 초기화 시작을 알림
connect(); // 네트워크 연결 메소드를 다시 호출
call("초기화 연결 메시지"); // 초기화 과정에서 메시지를 전송
}
@PreDestroy // 소멸 콜백 애노테이션, 빈이 소멸되기 전에 자동으로 호출됨
public void close() { // 소멸 메소드
System.out.println("NetworkClient.close"); // 소멸 시작을 알림
disConnect(); // 네트워크 연결 해제 메소드를 호출
}
}
@PostConstruct 애노테이션은 빈의 모든 의존성이 주입되고, 스프링 컨테이너에 의해 완전히 초기화된 후에 실행해야 하는 메서드에 사용됩니다. 이 애노테이션은 빈의 생성자가 실행된 후, 그리고 스프링의 의존성 주입이 완료된 후에 호출됩니다. 주로 초기 설정이나 시작 로직을 실행하는 데 사용됩니다.
@PreDestroy 애노테이션은 스프링 컨테이너가 종료되기 전에 빈을 정리하거나 자원을 해제할 필요가 있을 때 사용됩니다. 이 애노테이션은 컨테이너에 의해 관리되는 빈이 제거되기 직전에 호출됩니다. 주로 자원 해제, 로그 작성, 연결 종료 등의 정리 작업에 쓰입니다.
'SPRING > Spring' 카테고리의 다른 글
[스프링| 스프링 핵심 원리 | 기본편 | 빈 스코프 ] 싱글톤 빈과 함께 사용시 문제점 (0) | 2024.05.20 |
---|---|
[스프링| 스프링 핵심 원리 | 기본편 | 빈 스코프] 프로토 타입 스코프 (0) | 2024.05.20 |
[스프링| 스프링 핵심 원리 | 기본편 | 빈 생명주기 콜백] 빈 생명주기 콜백 시작 (0) | 2024.05.15 |
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 조회한 빈이 모두 필요할 때 List, Map / 수동 빈 (0) | 2024.05.14 |
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 조회 빈이 2개이상 - 문제 (0) | 2024.05.14 |