[Spring] Java @PostConstruct @PreDestroy @Resource 찾을 수 없음
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>
// https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'
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