SPRING

@PostConstruct, @preDestroy

devstep88 2023. 9. 26. 12:52

@PostConstruct

- 객체의 초기화 부분
- 객체가 생성된 후 별도의 초기화 작업을 위해 실행하는 메소드를 선언한다.
- @PostConstruct 어노테이션을 설정해놓은 init 메소드는 WAS가 띄워질 때 실행된다.

 

@PreDestroy

- 마지막 소멸 단계
- 스프링 컨테이너에서 객체(빈)를 제거하기 전에 해야할 작업이 있다면 메소드위에 사용하는 어노테이션.
- close() 하기 직전에 실행 -> ((AbstractApplicationContext) context).close()

 

package com.in28minutes.learnspirngframework.example.f1;

import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import java.util.Arrays;
@Component
class SomeClass{
	private SomeDependency someDependency;

	public SomeClass(SomeDependency someDependency) {
		this.someDependency = someDependency;
		System.out.println("All depnedencies are ready!");
	}
	@PostConstruct
	public void initialize(){
		someDependency.getReady();
	}

	@PreDestroy
	public void cleanUp(){
		System.out.println("Clean Up");
	}
}
@Component
class SomeDependency{

	public void getReady() {
		System.out.println("Some logic using SomeDependency@#!");
	}
}

@Configuration
@ComponentScan
public class PrePostAnnotationsContextLauncherApplication {

	public static void main(String[] args) {
		try(var context = new AnnotationConfigApplicationContext(PrePostAnnotationsContextLauncherApplication.class)) {
			Arrays.stream(context.getBeanDefinitionNames()).forEach(System.out::println);
		}

	}

}
All depnedencies are ready!
Some logic using SomeDependency@#!
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
prePostAnnotationsContextLauncherApplication
someClass
someDependency
Clean Up

java의 implements  InitializingBean, DisposableBean도 같은 역할을 한다.