본문 바로가기
IT/Java

@PostConstruct, @PreDestroy 어노테이션

by 성준하이 2023. 6. 20.
반응형

오늘 소개할 어노테이션은 다음과 같다.

 

  • @PostConstruct
  • @PreDestroy

해당 메서드를 이해하려면 Bean 생명주기(Life Cycle) 에 대해서 이해를 해야한다.

예전에 스프링이 지금처럼 활발하지 않을때는 인터페이스로 빈을 관리하거나,

 @Bean(initMethod = "initialize", destroyMethod = "close")

이런식으로 빈을 생성하여 시작시, 종료시 행해지는 메서드들을 정의하곤 했다.

 

그래서 최신 기술로는 오늘 소개하는 @PostConstruct, @PreDestroy 이 두 annotation을 사용하는것이 권장된다.

 

annotation에 대해서는 아래 참고 포스팅 참고 바란다.

 

@PostConstruct

Spring은 bean을 초기화 한 이후에 @PostConstruct을 한번만 호출한다.

 @PostConstruct는 WAS 가 뜰 때 bean이 생성된 다음 딱 한번만 실행된다.

따라서 @PostConstruct 를 사용하여 기본 사용자라던가, 딱 한번만 등록하면 되는 key 값 등을 등록하여 사용할 수 있다.

 

사용법은 다음과 같다.

이해하기 쉽게 초기에 한번 실행되는 의미로 init 이라는 함수로 만들었다.

@Component
public class Init {

    @Autowired
    private UsRepository usRepository;

    @PostConstruct
    private void init() {
        // 초기화 처리
        User test = new User("test", "test");
        User tt = new User("tt", "tt");
        usRepository.save(test, tt);
    }
}

@PreDestroy

@PreDestroy 역시 Spring이 애플리케이션 컨텍스트에서 bean을 제거하기 직전에 단 한 번만 실행된다.

@Component
public class UsRepository {

    private Connection dbConnection;
    @PreDestroy
    public void preDestroy() {
        // 자원 반환 등 종료 처리
        dbConnection.close();
    }
}

하지만 현재는 , 정확히 말하면 자바 9버전 이후로는 deprecated 되어 추가 dependency를 설정해줘야한다.

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

참고 포스팅

https://thenicesj.tistory.com/91

 

Annotation 소개 및 설명

다른 프로그래밍 언어에도 사용은 되지만 java의 spring/ springboot에서 특히 효율적으로 사용이 되는 Annotation에 대해 알아볼것이다. 영어사전을 찾아보면 뜻은 '주석' 이라는 뜻을 가진 단어인 annotat

thenicesj.tistory.com

https://thenicesj.tistory.com/269

 

Spring Bean 이란?

스프링에는 다양한 특징이 있지만 그중 하나는 제어의 역전 IoC 이다. 제어의 역전에 관한 내용은 아래 참고 포스팅을 참조하면 이해하기 쉬울 것이다. 스프링 컨테이너에서 직접 객체를 관리 하

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

HttpServletRequest, HttpServletResponse에 대한 이해  (36) 2023.06.24
spring-boot-maven-plugin  (33) 2023.06.22
JVM 내에 저장되어있는 데이터 위치 값 확인  (32) 2023.06.18
Optional – orElse() 와 orElseGet()  (37) 2023.06.16
[eclipse] Ant 란?  (36) 2023.06.15

댓글