티스토리 뷰

Spring framework 에서 @PostConstruct @PreDestroy 같은 Annotation 을 많이 사용할 것이다.


Java 9 이상부터는 찾을 수 없다는 오류가 뜬다.


(The import javax.annotation.PostConstruct cannot be resolved)



패키지만 보면 알겠지만, 사실 이 Annotation 은 Spring의 일부가 아니다.


JSR-250 스팩으로 이를 구현한 Framework 및 Library 에서 동작이 가능하다.


(JSR-250 스팩 : https://en.wikipedia.org/wiki/JSR_250 )


잘 사용하던 Annotation이 안되는 이유는,


이것이 JavaEE Module 인 java.xml.ws.annotation 의 일부인데.


java.xml.ws.annotation 가 Java 9부터 Deprecated 되었다.


이를 해결할 수 있는 방법은 여러가지 인데, 두가지만 적는다.


1. 종속성 추가


코드수정없이 제일 간단하다.


JSR-250 Common Annotations은 그대로 존재하기에. javax.annotations 종속성만 추가해주면 된다.


Maven

<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
Gradle

// https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api
compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'
repository

URL (https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api)



2. Spring bean interface 사용


Spring framework 의 경우 InitializingBean, DisposableBean 을 구현하여 @PostConstruct @PreDestroy 대체가 가능하다.


단점이라면 관련코드를 모두 수정해줘야한다. 그냥 1번하자.

import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; @Component public class TestComponent implements InitializingBean, DisposableBean{ @Override public void afterPropertiesSet() throws Exception { // @PostConstruct 대응 } @Override public void destroy() throws Exception { // @PreDestroy 대응 } }

[작성] devbible.tistory.com

댓글