@PostConstruct / @PreDestroy

2023. 5. 30. 18:37기술 창고/어노테이션 창고

728x90
SMALL

@PostConstruct / @PreDestroy

어플리케이션을 실행하게 되면 Spring은 자동으로 의존성을 연결하고, 의존성을 자동 연결하는 대로 가장 먼저 @PostConstruct 가 적용된 메소드를 호출합니다.
@PreDestroy 는 어플리케이션이 종료될 때 마지막에 수행될 작업을 지정해주는 어노테이션이다. 기본적으로 보유하고 있었던 리소스들을 해제하는 데에 일반적으로 사용됩니다.

@PostConstruct : 어플리케이션을 실행 후 의존성이 연결되는 대로 바로 가장 먼저 초기화 작업 혹은 선행 작업을 수행하려고 할 때 사용.
@PreDestroy : 어플리케이션이 종료될 때, 의존성 주입받은 객체 사용이 종료될 때, 보유하고 있는 리소스들을 해제하거나 마무리 작업을 수행할 때 사용하는 어노테이션.


아무때나 사용하는 것이 아닌 의존성 주입이 된 객체를 사용할 때 사용합니다.

즉, PostConstruct 는 의존성 주입받은 객체를 초기 세팅할 때 사용하고, PreDestroy는 주입된 객체에 대한 수행 작업이 마무리 될 때 마지막에 사용되는 뒷 정리 용도로 사용된다고 보면 될 것입니다.

// 어플리케이션을 실행하게 되면 Spring은 자동으로 의존성을 연결하고, 의존성을 자동 연결하는 대로 가장 먼저 @PostConstruct 가 적용된 메소드를 호출한다.
// @PreDestroy 는 어플리케이션이 종료될 때 마지막에 수행될 작업을 지정해주는 어노테이션이다. 기본적으로 보유하고 있었던 리소스들을 해제하는 데에 일반적으로 사용된다.
//
// @PostConstruct : 어플리케이션을 실행 후 의존성이 연결되는 대로 바로 가장 먼저 초기화 작업 혹은 선행 작업을 수행하려고 할 때 사용
// @PreDestroy : 어플리케이션이 종료될 때 보유하고 있는 리소스들을 해제하거나 마무리 작업을 수행할 때 사용하는 어노테이션
// 아무때나 사용하는 것이 아닌 의존성 주입이 된 상태에서 사용
// PostConstruct 는 의존성 주입받은 객체를 초기 세팅할 때 사용하고, PreDestroy는 주입된 객체에 대한 수행 작업이 마무리 될 때 마지막에 사용되는 뒷 정리 용도로 사용된다고 보면 될 것이다.
@Component
class SomeClass{
    private SomeDependency someDependency;

    public SomeClass(SomeDependency someDependency){
        this.someDependency = someDependency;
        System.out.println("All dependencies are ready!");
    }

    @PostConstruct
    public void initizalize(){
        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);
        }

    }
}

 

위의 코드를 실행해보면 가장 먼저 의존성 주입을 받고 연결한 뒤 PostConstruct 로 지정된 메소드가 가장 먼저 실행되면서 주입받은 객체의 함수를 실행하게됩니다.

그리고 마지막에 객체 호출이 종료가 되기 전 마지막에 PreDestroy 로 지정된 메소드가 실행이 됩니다.

728x90
반응형
LIST

'기술 창고 > 어노테이션 창고' 카테고리의 다른 글

@Controller / @Service / @Repository  (0) 2023.06.06
@Named / @Inject (ft. CDI)  (0) 2023.05.31
@Scope  (0) 2023.05.30
@Lazy  (0) 2023.05.30
@Primary  (0) 2023.05.30